home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Risc World 3
/
Risc World 3.iso
/
SOFTWARE
/
ISSUE2
/
PD
/
CAMPINS.ZIP
/
resources
/
CFSI
(
.txt
)
< prev
next >
Wrap
RISC OS BBC BASIC V Source
|
2002-05-25
|
170KB
|
7,478 lines
> ChangeFSI v1.15ac
altered x%=sx%*xmul%/xdiv%+.9999:y%=sy%*ymul%/ydiv%+.9999:rows%=sy%
to x%=sx%*xmul%/xdiv%+.1:y%=sy%*ymul%/ydiv%+.1:rows%=sy%
This helps remove the ugly black border when thumbnailing.
altered <wimp$scrap> to <Wimp$ScrapDir>.CFSI.XXXXX" where X is [A-Z]
this ensures the scrapfile CFSI uses is unique if CFSI is called twice
Added <ChangeFSI$Hourglass> so the Hourglass in ChangeFSI can be turned
on/off externally.
altered END=&4000000 to &200000 to ensure only 2M is used by djpeg.
also added the -maxmemory 512 option to djpeg to ensure not too
much memory is used up.
Altered the A$ input variable to GS_Trans it so if system variables are
use in the input line they are correctly evaluted.
added hourg%=TRUE to DEF FNChangefsi
bufferO% 256,buffer% 256
"OS_GSTrans","<ChangeFSI$Hourglass>",bufferO%,255
hourg$=
getstring(bufferO%)
"ON|On|on",hourg$)
hourg%=
hourg%=
"OS_GSTrans","<wimp$scrapDir>",bufferO%,255
'scrap$=
getstring(bufferO%)+".CFSI"
a%,b%,c%:c%=
(-(a%+b%))
"OS_File",8,scrap$: scrap$+="."+
(26))+
(26))+
(26))
("Set Wimp$Scrap2 "+scrap$)
areanumber%=0
"OS_GetEnv"
"OS_GSTrans",A$,buffer%,256
getstring(buffer%)
PRINT A$
#!task%=
A$," -wimp"):
task%
z%(1),p%(3),s%(3),m$(30)
%"A%=
"<ChangeFSI$Dir>.Messages"
&)B%=-1:
B%+=1:m$(B%)=
startfile%=
A$,6)<>"-wimp "
taskid%4:$taskid%="TASK"
"Wimp_Initialise",200,!taskid%,m$(20)
version%
version%>=350
"OS_Memory",8+(2<<8)
,r1,r2:vramsize%=r1*r2
vramsize%>0 vram%=
vram%=
vram%=
Wimp = (1<<18) + (3<<6)
1HCreateW = Wimp+1:OpenW = Wimp+5 :CloseW = Wimp+6:RedrawW = Wimp+8
2IUpdateW = Wimp+9:GetR% = Wimp+10:GetW = Wimp+11:SetI = Wimp+13
3IGetI = Wimp+14:GetP = Wimp+15:Drag = Wimp+16:CrMenu = Wimp+20
DcMenu = Wimp+21
"OS_SWINumberFromString",,"Wimp_PollIdle"
Poll%
"OS_SWINumberFromString",,"XOS_SpriteOp"
spopx%
"OS_SWINumberFromString",,"OS_SpriteOp"
spop%
"OS_SWINumberFromString",,"OS_ReadMonotonicTime"
Time%
"OS_SWINumberFromString",,"ColourTrans_ReturnColourNumber"
ctran%
"OS_SWINumberFromString",,"Wimp_SetCaretPosition"
Caretpos%
"OS_SWINumberFromString",,"Wimp_GetCaretPosition"
Getcaret%
"XOS_SWINumberFromString",,"DragASprite_Start"
dstart%;f%:
1 dstart%=0
"XOS_SWINumberFromString",,"JPEG_PlotScaled"
jpegpaint%;f%:
1 jpegpaint%=0
"OS_Byte",161,&1C
,,f%:
2)=0 dstart%=0
nextlocation%=
"Wimp_SlotSize",-1,-1
originalslot%
locale_initialise
version%>=300
q% 255,ifactors% 15,factors% 15,pixtrans% 255,paltemp% 1023,buffer% 255,idata% 1023
z% 1699,q% 255,ifactors% 15,factors% 15,pixtrans% 255,paltemp% 1023,buffer% 255,idata% 2399
eidata%=idata%+2400
H2scrap%=
:sprite%=
:sar%=
:saved%=
"OS_Byte",161,&8C
,,f%
"Wimp_OpenTemplate",,"<ChangeFSI$Dir>.3dTemplate"
"Wimp_OpenTemplate",,"<ChangeFSI$Dir>.Templates"
"Wimp_CloseTemplate":
$+" (code "+
version%>=300
name=q%
S$$name="*":here%=0:largest_tem%=0
"Wimp_LoadTemplate", ,0,,,,name,0
,size%,,,,,here%
here%
largest_tem%<size% largest_tem%=size%
$name="*"
"Wimp_LoadTemplate", ,0,,,,name,here%
,size%,,,,,here%
z% largest_tem%
dotemplate("Info")
CreateW,,z%
infow%:$!(z%+88+7*32+20)=m$(21)
dotemplate("Processing")
CreateW,,z%
proc%
`ap%(0)=!(z%+88+8*32+20):p%(1)=!(z%+88+9*32+20):p%(2)=!(z%+88+10*32+20):p%(3)=!(z%+88+12*32+20)
dotemplate("Output")
CreateW,,z%
output%:admode%=!(z%+88+20*32+20):adspcl%=!(z%+88+19*32+20):oldmode%=!(z%+88+34*32+20)
dotemplate("Scaling")
CreateW,,z%
scalew%:adscale%=!(z%+88+1*32+20)
ecs%(0)=!(z%+88+10*32+20):s%(1)=!(z%+88+11*32+20):s%(2)=!(z%+88+12*32+20):s%(3)=!(z%+88+13*32+20)
dotemplate("Save")
CreateW,,z%
save%:adsave%=!(z%+88+1*32+20):adsavesprite%=!(z%+88+0*32+20)
dotemplate("Sprite")
CreateW,,z%
sinfo%:adsname%=!(z%+88+5*32+20):adsbytes%=!(z%+88+8*32+20)
jHadsx%=!(z%+88+7*32+20):adsy%=!(z%+88+9*32+20):adsm%=!(z%+88+6*32+20)
dotemplate("Source")
CreateW,,z%
srcinfo%:adsrc%=!(z%+88+0*32+20)
dotemplate("Range")
CreateW,,z%
raninfo%:adran%=!(z%+88+0*32+20)
dotemplate("Zoom")
CreateW,,z%
zoom%:z%(0)=!(z%+88+4*32+20):z%(1)=!(z%+88+5*32+20)
dotemplate("JPEGOutput")
CreateW,,z%
jpego%:adjpegq%=!(z%+88+5*32+20)
dotemplate("Pic")
CreateW,,z%
pic%:adtitle%=z%!72
"Wimp_CloseTemplate"
w@!q%=-1:q%!4=0:q%!8=0:q%!12=68:q%!16=68:q%!20=%11000000000010
x:$(q%+24)="!"+m$(20):
"Wimp_CreateIcon",,q%
iconbar%
y*A%=
"<ChangeFSI$Dir>.Choices":
A%=0
z]fast%=
:dest%=1:statescale%=%10000000100:stateproc%=0:stateoutput%=&4052008:statejpeg%=&2
{N$p%(0)="":$p%(1)="2"+decimal_point$+"2":$p%(2)="24":$p%(3)="4":$adspcl%=""
|=$admode%="28":$s%(0)="1":$s%(1)="4":$s%(2)="1":$s%(3)="4"
$adjpegq%="75":$oldmode%=""
#A%,fast%,dest%,statescale%,stateproc%,stateoutput%,statejpeg%,$adjpegq%,$oldmode%
#A%,$p%(0),$p%(1),$p%(2),$p%(3),$admode%,$adspcl%
5$p%(1)=
locale_convert($p%(1),".",decimal_point$)
#A%,$s%(0),$s%(1),$s%(2),$s%(3)
q%!12=1<<21
@!q%=scalew%:
I%=0
statescale%>>I%
1 q%!8=1<<21
q%!8=0
q%!4=I%:
SetI,,q%:
I%=10
statescale%>>I%
1 q%!8=1<<21
q%!8=0
q%!4=I%+6:
SetI,,q%:
=!q%=proc%:
I%=0
stateproc%>>I%
1 q%!8=1<<21
q%!8=0
q%!4=I%:
SetI,,q%:
B!q%=output%:
I%=0
stateoutput%>>I%
1 q%!8=1<<21
q%!8=0
q%!4=I%:
SetI,,q%:
>!q%=jpego%:
I%=0
statejpeg%>>I%
1 q%!8=1<<21
q%!8=0
q%!4=I%:
SetI,,q%:
stateoutput%>>17
1 q%!8=1<<22
q%!8=0
i!q%=output%:q%!12=1<<22:q%!4=7:
SetI,,q%:q%!4=8:
SetI,,q%:q%!4=13:
SetI,,q%:q%!4=14:
SetI,,q%
showscaletofit:$z%(0)="1":$z%(1)="1"
"OS_UpdateMEMC"
oldmemc
jpegsave%=
"OS_UpdateMEMC",oldmemc,&700:
errorbox:
CrMenu,,-1
Drag,,-1
sprite%
"Wimp_SlotSize",originalslot%,-1
CF$="":
startfile% startfile%=
A$,"-wimp")+6):
callFSI
Poll%,1,q%
sprite%
redraw_window(!q%)
open_window(!q%,q%!4,q%!8,q%!12,q%!16,q%!20,q%!24,q%!28)
&400c3,,q%:nextlocation%=
removearea
"Wimp_SlotSize",originalslot%,-1:saved%=
:sprite%=
checkmouse(!q%,q%!4,q%!8,q%!12,q%!16,q%!20)
GetP,,q%:dw%=q%!12:di%=q%!16:
dstart%
"DragASprite_Stop"
Jq%!12=0:q%!16=1:q%!20=dw%:q%!24=di%:q%!28=!q%:q%!32=q%!4:q%!36=!sar%+3
jpegsave%
q%!40=&c85
q%!40=&ff9
/temp$=
ZS(adsave%):foo%=
temp$,"."):
foo%
)temp$=
temp$,foo%+1):foo%=
temp$,".")
-$(q%+44)=temp$+
0:!q%=44+(
temp$+1+3
"Wimp_SendMessage",17,q%,dw%,di%:myref%=q%!8
key(!q%,q%!4,q%!24)
menuselect(q%)
17,18:
receive(q%)
=&0200000
"Set ChangeFSI$ReturnCode "+
$+" (code "+
+")":
removearea:
1foo%=0:A%=
ChangeFSI(A$,-1,-1,0,-1,-1,foo%,
removearea:*unset ChangeFSI$ReturnCode
dotemplate(a$)
version%>300
"Wimp_LoadTemplate",,0,,,,a$+z$,0
,,indsize%
A% indsize%
"Wimp_LoadTemplate",,z%,A%,A%+indsize%,-1,a$+z$,0
"Wimp_LoadTemplate",,z%,idata%,eidata%,-1,a$+z$,0
,,idata%
locale_initialise
decimal_point$=".":
"Territory_ReadSymbols",-1,0
decimal_point$=
locale_convert(n$,f$,t$)
f$=t$
n$,f$)
i%<>0
n$,i%-1)+t$+
n$,i%+1)
receive(q%)
q%!16
removearea:
"Wimp_CloseDown":
q%!20<>save%
B!q%=60:q%!12=q%!8:q%!16=2:q%!36=-1:$(q%+44)="<Wimp$Scrap2>"+
"Wimp_SendMessage",17,q%,q%!4:scrap%=q%!8
jpegsave%
"OS_File",10,
ZS(q%+44),&c85,,sar%,sar%+jpegsize%
spop%,&10C,sar%,
ZS(q%+44)
$adsave%=
ZS(q%+44)
7q%!12=q%!8:q%!16=3:
"Wimp_SendMessage",18,q%,q%!4
q%!36<>-1 saved%=
CrMenu,,-1
3:F$=
ZS(q%+44):
scrap% scrap%=scrap%=q%!12
6q%!12=q%!8:q%!16=4:
"Wimp_SendMessage",17,q%,q%!4
callFSI
q%!40
&ff0,&c85
6q%!12=q%!8:q%!16=4:
"Wimp_SendMessage",17,q%,q%!4
ZS(q%+44):
callFSI
saved%
sprite%
-!buffer%=
:$(buffer%+4)=m$(2)+F$+m$(3)+
"Wimp_ReportError",buffer%,%10111,m$(20)
3q%!12=q%!8:
A%<>1
"Wimp_SendMessage",19,q%,0
9,&400C1:
sprite%
getmodeinfo:
&400d1,pic%,0,-32767,32767,0
showscaletofit
"XOS_ReadVarVal","ChangeFSI$Dir",paltemp%,256,0,3
,,bootlen%
paltemp%?bootlen%=13
#q%!20,"Run "+$paltemp%
callFSI
checkvalues
deducemode:A%=47
jpegsave%=
dest%=0
Ajpegsave%=
:A$="JPEG":
geticonstate(jpego%,2) A$="JPEGMONO"
A$+=$adjpegq%
geticonstate(output%,15)
A$+=$adspcl%
geticonstate(output%,16)
geticonstate(output%,5)
geticonstate(output%,11) A$+="R"
A$,3
A%=63
geticonstate(output%,6) A$="27t"
geticonstate(output%,12) A$="12t"
A%=255 A$+="d"
/A$="garbage "+F$+" <ChangeFSI$Dir>.Foo "+A$
ChangeFSISuffix
%info$="":range$=m$(19):cputime%=0
sprite% !q%=pic%:
&400c3,,q%:saved%=
:sprite%=
nextlocation%=
"Wimp_SlotSize",originalslot%,-1:
removearea
fast%
"OS_UpdateMEMC",&300,&700
oldmemc
ChangeFSI(A$,-1,-1,nextlocation%,0,0,sar%,0)
fast%
"OS_UpdateMEMC",oldmemc,&700
scrap% scrap%=
"OS_File",6,F$
A%<2
sar%<>0
-$adsx%=
xsp%:$adsy%=
ysp%:
jpegsave%
"$adsm%="JPEG":$adsname%="JPEG"
$adsbytes%=
jpegsize%
x=xsp%*2:y=ysp%*2
&35,-1,4
,,nx:
&35,-1,5
=!ifactors%=1:ifactors%!4=1:ifactors%!8=nx:ifactors%!12=ny
$adsavesprite%="file_c85"
F$,7)="<Wimp$S" F$="JPEGImage"
spopx%,&10d,sar%,pixtrans%,255,1
ZS(pixtrans%):
spopx%,&128,sar%,n$
,,,x,y,,m
$adsm%=
m:$adsname%=n$
$adsbytes%=
sar%!12
&35,m,4
,,nx:x=x<<nx
&35,m,5
,,ny:y=y<<ny:
getmodeinfo
$adsavesprite%="file_ff9"
F$,7)="<Wimp$S" F$="SpriteFile"
%/!q%=save%:q%!4=0:q%!8=0:q%!12=0:
SetI,,q%
&c$adran%=range$:$adsrc%=info$+m$(0)+
(cputime%
100)+decimal_point$+
(cputime%
100),2)+m$(1)
saved%=
:sprite%=
()A%=
"."+F$,A%,1)<>".":A%-=1:
$adsave%=
"."+F$,A%+1)
pic%=
create_window(x,y,F$)
popup(pic%,-1)
checkvalues
e,error$,flag%
dest%=0
$adjpegq%>100
11e=1:error$=m$(22)+m$(25)+m$(23)+m$(27)+m$(24)
$admode%,1)<"A"
dest%=1
&35,
$admode%,0
;flag%
$admode%=0 flag%=2
$admode%>127
$admode%<256 flag%=2
(flag%
2)>0
81e=2:error$=m$(22)+m$(26)+m$(23)+m$(13)+m$(24)
Drag,,-1:!buffer%=e:$(buffer%+4)=error$+
"Wimp_ReportError",buffer%,%01,m$(20)
A%=2
removearea:
"Wimp_CloseDown":
ChangeFSISuffix
safe%=
geticonstate(scalew%,1) A$+=" "+
tofitx+": "+
tofity+":":safe%=
geticonstate(scalew%,5) A$+=" 1:2":safe%=
geticonstate(scalew%,4) A$+=" 1:2 1:1":safe%=
geticonstate(scalew%,3) A$+=" 1:1 1:2":safe%=
geticonstate(scalew%,9)
safe%=
$s%(0) A$+=" "+$s%(0)
A$+=" 1"
A$+=":"+$s%(1)
$s%(2) A$+=" "+$s%(2)
A$+=" 1"
A$+=":"+$s%(3)
geticonstate(scalew%,0) A$+=" -nosize"
geticonstate(scalew%,18) A$+=" -noscale"
geticonstate(scalew%,19) A$+=" -lock"
geticonstate(scalew%,6)
RHsafe%=
geticonstate(scalew%,16) A$+=" -rotate"
A$+=" -rotate-"
geticonstate(scalew%,7) A$+=" -hflip":safe%=
geticonstate(scalew%,8) A$+=" -vflip":safe%=
geticonstate(proc%,0) A$+=" -range":safe%=
geticonstate(proc%,1) A$+=" -equal":safe%=
geticonstate(proc%,2) A$+=" -nodither"
geticonstate(proc%,3) A$+=" -invert":safe%=
geticonstate(proc%,4) A$+=" -brighten"
geticonstate(proc%,5) A$+=" -black"+$p%(0)
geticonstate(proc%,6) A$+=" -gamma"+
locale_convert($p%(1),decimal_point$,"."):safe%=
geticonstate(proc%,7) A$+=" -sharpen"+$p%(2):safe%=
geticonstate(proc%,11) A$+=" -smooth"+$p%(3)
checkandfinish
saved%
sprite%
removearea:
"Wimp_CloseDown":
b-!buffer%=
:$(buffer%+4)=m$(2)+F$+m$(3)+
"Wimp_ReportError",buffer%,%10111,m$(20)
A%=1
removearea:
"Wimp_CloseDown":
key(handle%,icon%,key%)
key%=&1b
CrMenu,,-1:
handle%
zoom%:
key%
dozoom(icon%-4,0):
icon%=4
&400d2,zoom%,5,,,-1,
$z%(0)
icon%=5
CrMenu,,-1
&18e,&18f:
dozoom(icon%-4,0)
&400d2,zoom%,icon%
1,,,-1,
$z%(icon%
save%
key%=13
savesprite:
output%
icon%=34
geticonstate(output%, 24)
$admode% = $oldmode%:!q%=output%:q%!4=20:q%!8=0:q%!12=0:
SetI,,q%
showscaletofit
key%=13
CrMenu,,-1:
key%=&18e
icon%
19:icon%=34:key%=oldmode%
34:icon%=22:key%=adjpegq%
22:icon%=19:key%=adspcl%
key%=&18f
icon%
22:icon%=34:key%=oldmode%
34:icon%=19:key%=adspcl%
19:icon%=22:key%=adjpegq%
key%>1024
&400d2,output%,icon%,,,-1,
$key%:
proc%:
key%
&18e,13:icon%+=1:
icon%>10 icon%=8:
key%=13
CrMenu,,-1:
&400d2,proc%,icon%,,,-1,
$p%(icon%-8):
&18f:icon%-=1:
icon%<8 icon%=10
&400d2,proc%,icon%,,,-1,
$p%(icon%-8):
scalew%:
key%
&18e,13:icon%+=1:
icon%>13 icon%=10:
key%=13
CrMenu,,-1:
&400d2,scalew%,icon%,,,-1,
$s%(icon%-10):
&18f:icon%-=1:
icon%<10 icon%=13
&400d2,scalew%,icon%,,,-1,
$s%(icon%-10):
"Wimp_ProcessKey",key%
savesprite
F$=$adsave%
Drag,,-1:!buffer%=3:$(buffer%+4)=m$(28)+
"Wimp_ReportError",buffer%,%11,m$(20)
A%=2
CrMenu,,-1
jpegsave%
"OS_File",10,$adsave%,&c85,,sar%,sar%+jpegsize%
spop%,&10C,sar%,$adsave%
CrMenu,,-1
checkmouse(mousex%,mousey%,b%,handle%,icon%,ob%)
moved%:moved%=
handle%
pic%:
domenu(pic%,m$(4)+">sinfo%,"+m$(5)+">srcinfo%,"+m$(6)+">raninfo%,"+m$(7)+">zoom%,"+m$(8)+">save%,"+m$(9),m$(20))
domenu(101,m$(10)+">infow%,"+m$(11)+">scalew%,"+m$(12)+">proc%,"+m$(13)+">output%:dest%,"+m$(27)+">jpego%:1-dest%,"+m$(9)+","+m$(14)+":fast%AND1,"+m$(15)+","+m$(16),m$(20))
rmenuhandle%=handle%
handle%
zoom%:
icon%
dozoom(0,1)
dozoom(0,-1)
dozoom(1,1)
dozoom(1,-1)
handle%
zoom%:
icon%
dozoom(0,-1)
dozoom(0,1)
dozoom(1,-1)
dozoom(1,1)
handle%
output%:
dest%=0 dest%=1:
domenu(101,m$(10)+">infow%,"+m$(11)+">scalew%,"+m$(12)+">proc%,"+m$(13)+">output%:dest%,"+m$(27)+">jpego%:1-dest%,"+m$(9)+","+m$(14)+":fast%AND1,"+m$(15)+","+m$(16),m$(20)):
Getcaret%,,q%:moved%=
icon%
3,4,5,6:
killcurrent(
(22+icon%)):!q%=output%:q%!4=18:q%!8=0:q%!12=1<<21:
SetI,,q%:q%!4=24:
SetI,,q%
killcurrent("S16,90,90"):!q%=output%:q%!4=18:q%!8=0:q%!12=1<<21:
SetI,,q%:q%!4=24:
SetI,,q%
killcurrent("S32,90,90"):!q%=output%:q%!4=18:q%!8=0:q%!12=1<<21:
SetI,,q%:q%!4=24:
SetI,,q%
killcurrent("0"):!q%=output%:q%!4=18:q%!8=0:q%!12=1<<21:
SetI,,q%:q%!4=24:
SetI,,q%
killcurrent("8"):!q%=output%:q%!4=18:q%!8=0:q%!12=1<<21:
SetI,,q%:q%!4=24:
SetI,,q%
killcurrent("12"):!q%=output%:q%!4=18:q%!8=0:q%!12=1<<21:
SetI,,q%:q%!4=24:
SetI,,q%
killcurrent("15"):!q%=output%:q%!4=18:q%!8=0:q%!12=1<<21:
SetI,,q%:q%!4=24:
SetI,,q%
killcurrent("S16,90,45"):!q%=output%:q%!4=18:q%!8=0:q%!12=1<<21:
SetI,,q%:q%!4=24:
SetI,,q%
killcurrent("S32,90,45"):!q%=output%:q%!4=18:q%!8=0:q%!12=1<<21:
SetI,,q%:q%!4=24:
SetI,,q%
killcurrent(
deducemode):
SetI,,q%:
Caretpos%,output%,19,,,-1,
($adspcl%):!q%=output%:q%!4=7:q%!8=0:q%!12=1<<22:
SetI,,q%:q%!4=8:
SetI,,q%:q%!4=13:
SetI,,q%:q%!4=14:
SetI,,q%
killcurrent(
deducemode):!q%=output%:q%!4=7:q%!8=0:q%!12=1<<22:
SetI,,q%:q%!4=8:
SetI,,q%:q%!4=13:
SetI,,q%:q%!4=14:
SetI,,q%
killcurrent(
deducemode):!q%=output%:q%!4=7:q%!8=1<<22:q%!12=1<<22:
SetI,,q%:q%!4=8:
SetI,,q%:q%!4=13:
SetI,,q%:q%!4=14:
SetI,,q%
$admode%,1) = "S"
$admode%,2) = "45"
killcurrent("15"):!q%=output%:q%!4=18:q%!8=0:q%!12=1<<21:
SetI,,q%:q%!4=24:
SetI,,q%
killcurrent("28"):!q%=output%:q%!4=18:q%!8=0:q%!12=1<<21:
SetI,,q%:q%!4=24:
SetI,,q%
18:!q%=output%:q%!4=24:q%!8=0:q%!12=1<<21:
SetI,,q%
24:!q%=output%:q%!4=18:q%!8=0:q%!12=1<<21:
SetI,,q%:
killcurrent(
deducemode):
Caretpos%,output%,34,,,-1,
($oldmode%)
moved%
Caretpos%,output%,q%!4,q%!8,q%!12,q%!16,q%!20
moved%
Caretpos%,output%,q%!4,q%!8,q%!12,q%!16,q%!20
geticonstate(output%,18) $admode%=
deducemode
2!q%=output%:q%!4=20:q%!8=0:q%!12=0:
SetI,,q%
showscaletofit
save%:
icon%
savesprite
sprite%
getw(pic%):
open_window(pic%,x0%,y0%,x1%,y1%,scx%,scy%,-1)
jpego%:
dest%=1
Getcaret%,,q%
dest%=0:
domenu(101,m$(10)+">infow%,"+m$(11)+">scalew%,"+m$(12)+">proc%,"+m$(13)+">output%:dest%,"+m$(27)+">jpego%:1-dest%,"+m$(9)+","+m$(14)+":fast%AND1,"+m$(15)+","+m$(16),m$(20))
icon%=5
Caretpos%,jpego%,q%!4,q%!8,q%!12,q%!16,q%!20
icon%
$adjpegq%=
$adjpegq%-1)
$adjpegq%=
$adjpegq%+1)
$adjpegq%<0 $adjpegq%="0"
$adjpegq%>100 $adjpegq%="100"
0!q%=jpego%:q%!4=5:q%!8=0:q%!12=0:
SetI,,q%
Caretpos%,jpego%,5,,,-1,
$adjpegq%
$adjpegq%=
$adjpegq%+1)
$adjpegq%=
$adjpegq%-1)
$adjpegq%<0 $adjpegq%="0"
$adjpegq%>100 $adjpegq%="100"
0!q%=jpego%:q%!4=5:q%!8=0:q%!12=0:
SetI,,q%
Caretpos%,jpego%,5,,,-1,
$adjpegq%
handle%
save%:
icon%
getw(save%)
!q%=save%:q%!4=0:
GetI,,q%
?!q%=save%:q%!4=5:q%!8+=bx%:q%!12+=by%:q%!16+=bx%:q%!20+=by%
3q%!24=0:q%!28=0:q%!32=&7FFFFFFF:q%!36=&7FFFFFFF
+t$="file_ff9":
jpegsave% t$="file_c85"
dstart%
dstart%,%11000101,1,t$,q%+8,q%+24
"Wimp_DragBox",,q%
dozoom(s%,a%)
s%=0
/$z%(0)=
$z%(0)+a%):
$z%(0)="0" $z%(0)="1"
/$z%(1)=
$z%(1)+a%):
$z%(1)="0" $z%(1)="1"
2!q%=zoom%:q%!4=4+s%:q%!8=0:q%!12=0:
SetI,,q%
/!q%=pic%:
GetW,,q%:f%=q%!28:
&400c3,,q%
pic%=
create_window(x,y,F$)
popup(pic%,f%)
domenu(handle%,menu$,menutitle$)
menuhandle%=handle%
%menuptr%=buffer%:indirect%=idata%
menuptr%!20=44
$menuptr%=menutitle$
;menuptr%?12=7:menuptr%?13=2:menuptr%?14=7:menuptr%?15=0
!menuptr%!16=200:menuptr%!24=0
menuptr%+=28
i1%=i%+1:i%=
menu$+",",",",i1%)
8item$=
menu$,i1%,i%-i1%):
menuitem(item$):
item$=""
#menuptr%!-24=(menuptr%!-24)
handle%=101
CrMenu,,buffer%,mousex%-64,96+9*44
CrMenu,,buffer%,mousex%-32,mousey%+16
menuitem(text$)
text$=""
+flg%=0:submenu%=-1:I%=
text$,":"):
!*flg%=
text$,I%+1):text$=
text$,I%-1)
text$,">"):
$.submenu%=
text$,I%+1):text$=
text$,I%-1)
menuptr%!0=flg%
menuptr%!4=submenu%
(text$=m$(9)
(F$=""
F$="SpriteFile"
F$="JPEGImage"))
(text$=m$(14)
vram%)
menuptr%!8=&07400021
menuptr%!8=&07000021
text$*16+8>buffer%!16 buffer%!16=
text$*16+8
text$>12
/Cmenuptr%!8=menuptr%!8
256:menuptr%!20=
text$+1:menuptr%!16=0
0?menuptr%!12=indirect%:$indirect%=text$:indirect%+=
text$+2
$(menuptr%+12)=text$
menuptr%+=24
menuselect(menus%)
GetP,,paltemp%:adjust%=paltemp%!8
DcMenu,,buffer%,menus%,
200," ")
,,,a$
a$=""
menuhandle%
pic%
m$(9):
callFSI
m$(14):fast%=
fast%
m$(27):dest%=0
m$(13):dest%=1
m$(9):
callFSI
m$(15)
FGstatescale%=0:
I%=0
9:statescale%+=
geticonstate(scalew%,I%)<<I%:
I%=10
13:statescale%+=
geticonstate(scalew%,I%+6)<<I%:
HCstateproc%=0:
I%=0
7:stateproc%+=
geticonstate(proc%,I%)<<I%:
IJstateoutput%=0:
I%=0
26:stateoutput%+=
geticonstate(output%,I%)<<I%:
JDstatejpeg%=0:
I%=0
3:statejpeg%+=
geticonstate(jpego%,I%)<<I%:
K!A%=
"<ChangeFSI$Dir>.Choices"
#A%,fast%,dest%,statescale%,stateproc%,stateoutput%,statejpeg%,$adjpegq%,$oldmode%
#A%,$p%(0),
locale_convert($p%(1),decimal_point$,"."),$p%(2),$p%(3),$admode%,$adspcl%
#A%,$s%(0),$s%(1),$s%(2),$s%(3)
m$(16):
checkandfinish
adjust%
checkmouse(0,0,2,rmenuhandle%,0,0)
create_window(x,y,title$)
V-x=x*
$z%(0)
$z%(1):y=y*
$z%(0)
$z%(1)
W !z%=0:z%!4=-y:z%!8=x:z%!12=0
X$z%!40=0:z%!44=-y:z%!48=x:z%!52=0
x<128
y<128 z%?35=0
z%?35=255
Z)$adtitle%="":
CreateW,,z%
handle%
$adtitle%=title$
=handle%
popup(handle%,f%)
"OS_ReadModeVariable",-1,4
,,modexshift%
"OS_ReadModeVariable",-1,5
,,modeyshift%
"OS_ReadModeVariable",-1,11
,,rightscr%
"OS_ReadModeVariable",-1,12
,,topscr%
bArightscr%=rightscr%<<modexshift%:topscr%=topscr%<<modeyshift%
getw(handle%)
d9xo%=rightscr%/2-(x0%+x1%)/2:yo%=topscr%/2-(y0%+y1%)/2
open_window(handle%,x0%+xo%,y0%+yo%,x1%+xo%,y1%+yo%,scx%,scy%,f%)
open_window(handle%,x0%,y0%,x1%,y1%,scx%,scy%,bhandle%)
handle%=-1
q%!0=handle%:q%!28=bhandle%
j)q%!4=x0%:q%!8=y0%:q%!12=x1%:q%!16=y1%
q%!20=scx%:q%!24=scy%
OpenW,,q%
getw(handle%)
!q%=handle%:
GetW,,q%
info(q%+4):bhandle%=q%!28:flags%=q%!32
info(q%)
s=x0%=!q%:y0%=q%!4:x1%=q%!8:y1%=q%!12:scx%=q%!16:scy%=q%!20
bx%=x0%-scx%:by%=y1%-scy%
redraw_window(handle%)
handle%=pic%
x?!factors%=!ifactors%*
$z%(0):factors%!4=ifactors%!4*
$z%(0)
yCfactors%!8=ifactors%!8*
$z%(1):factors%!12=ifactors%!12*
$z%(1)
reduce(!factors%,factors%!8):
reduce(factors%!4,factors%!12)
!q%=handle%
RedrawW,,q%
more%
info(q%+4):by%=by%-
$z%(0)
$z%(1))
more%
jpegsave%
jpegpaint%
jpegpaint%,sar%,bx%,by%,factors%,jpegsize%,1
1)=0
spopx%,&134,sar%,n$,bx%,by%,,factors%,spx%
GetR%,0,q%
more%
geticonstate(handle%,icon%)
&!q%=handle%:q%!4=icon%:
GetI,,q%
=q%!24>>21
getmodeinfo
jpegsave%
&35,-1,4
,,nx:
&35,-1,5
=!ifactors%=1:ifactors%!4=1:ifactors%!8=nx:ifactors%!12=ny
"XWimp_ReadPixTrans",&100,sar%,n$,,,,ifactors%,pixtrans%
spopx%,&118,sar%,n$
,,sptr%
sptr%!32=44
palptr%=0
grab%=0
2048-8
8:paltemp%!(grab%>>1)=sptr%!(grab%+44):
palptr%=paltemp%
Q%=0
255:pixtrans%?Q%=Q%:
sptr%!32=44+2048
Q%=0
ctran%,palptr%!(Q%<<2)
pixtrans%?Q%:
"ColourTrans_SelectTable",m,palptr%,-1,-1,pixtrans%
8spx%=-1:
Q%=0
pixtrans%?Q%<>Q% spx%=pixtrans%
deducemode
m,x,y
geticonstate(output%,21)
geticonstate(output%,17)
="JPEG8"
="JPEG24"
geticonstate(output%,18)
&6,135
&35,-1,9
m>3
&35,-1,4
&35,-1,5
x=180/(2^x):y=180/(2^y)
="S"+
(2^m)+","+
x+","+
geticonstate(output%,24)
=$oldmode%
=$admode%
showscaletofit
m,x,y
$admode%=
deducemode
?admode%
$admode%,5)>
$admode%,8) x=6
$admode%,2)>16 x+=5
x+=4
&35,-1,11
,,tofitx:
&35,-1,12
,,tofity
&35,-1,11
,,tofitx:
&35,-1,12
,,tofity
$admode%
&35,m,11
,,tofitx:
&35,m,12
,,tofity
&35,m,4
&35,m,5
y>x x=6
&35,m,9
,,y:x+=y
Atofitx+=1:tofity+=1:$adscale%=m$(17)+
tofitx+m$(18)+
tofity
@q%!12=1<<21:!q%=output%:
I%=0
I%=x q%!8=1<<21
q%!8=0
=q%!4=I%+3:
SetI,,q%:
x=12 q%!8=0:q%!4=24:
SetI,,q%
killcurrent(m$)
"q%!12=1<<21:!q%=output%:q%!8=0
q%!4=20:
SetI,,q%
$admode%=m$
ZS(I%)
A$+=
?I%:I%+=1:
?I%<14:=A$
errorbox
Drag,,-1:!buffer%=
:$(buffer%+4)=
$+" (code "+
+")"+
"Wimp_ReportError",buffer%,%11,m$(20)
A%=2
removearea:
"Wimp_CloseDown":
ChangeFSI(A$,spritearea%,workspace%,worklimit%,oksave%,okinfo%,
ram%,fast%)
A$(),r%(),g%(),b%(),rpal%(),gpal%(),bpal%(),table%(),cl%(),xl%(),xl2%()
xp%(),rm%(),rm1%(),rm2%(),vals%(),nl%(),A%(),B%(),new%(),st%(),jpq%(),m
bufferO% 256
"OS_GSTrans","<wimp$scrapDir>",bufferO%,255
'scrap$=
getstring(bufferO%)+".CFSI"
a%,b%,c%:c%=
(-(a%+b%))
"OS_File",8,scrap$: scrap$+="."+
(26))+
(26))+
(26))
"OS_GSTrans","<ChangeFSI$Hourglass>",bufferO%,255
hourg$=
getstring(bufferO%)
"ON|On|on",hourg$)
hourg%=
hourg%=
A$,1)<>" "
A$<>0 A$=
A$,2):
A$,1)=" " A$=
A$,2):
A$,1)=" " A$=
A$,5))="-QUIT"
A$,7):
A$,1)<>" "
A$<>0 A$=
A$,2):
A$,1)=" " A$=
A$,2):
A$(100):ARG%=0:B%=
A$," ")
B%<>0
+ARG%+=1:A$(ARG%)=
A$,B%-1):A$=
A$,B%+1)
A$,1)=" ":A$=
A$,2):
A$," ")
A$<>"" ARG%+=1:A$(ARG%)=A$
Xinvert%=
:range%=
:sharpen%=
:info%=
:cache%=
:cacheareanumber%=0:dither%=
:black%=
Chist%=
:equal%=
:vflip%=
:hflip%=
:scale%=
:scaleo%=
:scrapf%=
6gamma=1:rotate%=
:max%=20000000:bright%=15:lock%=
rwt=.299:gwt=.587:bwt=.114
ARG%<3
"ChangeFSI interactive input (read FSIinfo for command line details)"
"Source file: "s$,"Destination file: "f$,"Output mode: "m$
"(X)Scale (e.g. 2:1): "xs$:
"Y Scale: "ys$
"Info on input picture?"a$:
a$,1))="Y" info%=
"Invert picture colours?"a$:
a$,1))="Y" invert%=
"Compute histogram of input?"a$:
a$,1))="Y" hist%=
"Apply histogram equalisation?"a$:
a$,1))="Y" equal%=
"Expand input dynamic range?"a$:
a$,1))="Y" range%=
:equal%=
"Sharpen picture by (e.g. 12 for harsh, 24 for soft) "a$
a$<>"" sharpen%=
"Rotate?"a$:
a$,1))="Y" rotate%=1
scale%=
:scaleo%=
:fast%=
A%=ARG%
uc(A$(ARG%))="-INFO" info%=
:A$(ARG%)="":ARG%-=1
uc(A$(ARG%))="-HIST" hist%=
:A$(ARG%)="":ARG%-=1
uc(A$(ARG%))="-LOCK" lock%=
:A$(ARG%)="":ARG%-=1
uc(A$(ARG%))="-EQUAL" equal%=
:range%=
:A$(ARG%)="":ARG%-=1
uc(A$(ARG%))="-RANGE" range%=
:equal%=
:A$(ARG%)="":ARG%-=1
uc(A$(ARG%))="-INVERT" invert%=
:A$(ARG%)="":ARG%-=1
uc(A$(ARG%))="-NOSCALE" scale%=
:scaleo%=
:A$(ARG%)="":ARG%-=1
uc(A$(ARG%))="-NOSIZE" scale%=
:A$(ARG%)="":ARG%-=1
uc(A$(ARG%))="-NODITHER" dither%=
:A$(ARG%)="":ARG%-=1
uc(A$(ARG%))="-BRIGHTEN" bright%=16:A$(ARG%)="":ARG%-=1
uc(A$(ARG%))="-ROTATE" rotate%=1:A$(ARG%)="":ARG%-=1
uc(A$(ARG%))="-ROTATE-" rotate%=-1:A$(ARG%)="":ARG%-=1
uc(A$(ARG%))="-VFLIP" vflip%=
:A$(ARG%)="":ARG%-=1
uc(A$(ARG%))="-HFLIP" hflip%=
:A$(ARG%)="":ARG%-=1
uc(A$(ARG%))="-NOMODE" fast%=
:A$(ARG%)="":ARG%-=1
A$(ARG%),6))="-BLACK"
Jblack%=32:
A$(ARG%)>6 black%=
A$(ARG%),7):
black%>128 black%=128
A$(ARG%)="":ARG%-=1
A$(ARG%),6))="-GAMMA"
1gamma=2.2:
A$(ARG%)>6 gamma=
A$(ARG%),7)
A$(ARG%)="":ARG%-=1
A$(ARG%),8))="-SHARPEN"
6sharpen%=24:
A$(ARG%)>8 sharpen%=
A$(ARG%),9)
A$(ARG%)="":ARG%-=1
A$(ARG%),7))="-SMOOTH"
#7sharpen%=-1:
A$(ARG%)>7 sharpen%=-
A$(ARG%),8)
$3A$(ARG%)="":ARG%-=1:
sharpen%<-23 sharpen%=-23
A$(ARG%),4))="-RED" rwt=
A$(ARG%),5):A$(ARG%)="":ARG%-=1
A$(ARG%),6))="-GREEN" gwt=
A$(ARG%),7):A$(ARG%)="":ARG%-=1
A$(ARG%),5))="-BLUE" bwt=
A$(ARG%),6):A$(ARG%)="":ARG%-=1
A$(ARG%),4))="-MAX"
*Fmax%=
A$(ARG%),5):
A$(ARG%),"K")
A$(ARG%),"k") max%=max%*1024
A$(ARG%)="":ARG%-=1
A%=ARG%
.2s$=A$(1):f$=A$(2):m$=A$(3):xs$=A$(4):ys$=A$(5)
okinfo%
info%=
workspace%>=0
flex%=
worklimit%=0
flex%=
flex%=
:nextlocation%=worklimit%
6"pnm$=
uc(m$):
pnm$+",",3)
"AIM":m=-1:m$=""
"P1,","P4,":m=-2:m$="":spm=18
"P2,","P5,":m=-2:m$="T":spm=20
"P3,","P6,":m=-4:pnm$=
pnm$,2):p6bits=8:I%=
m$,4):m$=""
I%>0
I%<8 p6bits=I%
"P15":m=-3:m$=""
"C15":m=-5:m$=""
"IRL":m=-4:m$="":p6bits=8
"S16":m=-6:m$=""
"S24":m=-7:m$="":p6bits=8
"S32":m=-8:m$="":p6bits=8
"JPE":m$="":p6bits=8:
pnm$,8)="JPEGMONO" m=-9:jpegquality%=
pnm$,9)
m=-10:jpegquality%=
pnm$,5)
m$:spm=m:m$=
m$,1)):
"CDRT",m$)=0 m$=""
xs$=""
xs$,1)="-"
F#xmul%=1:xdiv%=1:ymul%=1:ydiv%=1
ys$="" ys$=xs$
I)xmul%=
xs$:xdiv%=
xs$,":")+1)
J)ymul%=
ys$:ydiv%=
ys$,":")+1)
L&flag=-1:
8,5,s$
r0,,r2:dir=r0=2
dir
NDpanic=
8,5,s$+".raw"
r0,,r2:
r0=1 s$+=".raw":dir=
:panic=
panic
8,5,s$+".red"
r0,,r2:
r0=1 panic=
panic
42,"Directory given"
R>ftype=r2>>8
&FFF:bits=28:F=2^bits:c%=0:cc%=0:ccc%=0:o%=0
dir
T?c%=
(s$+".red"):
c%=0
42,"Red file "+s$+".red not found"
UFcc%=
(s$+".green"):
cc%=0
42,"Green file "+s$+".green not found"
VEccc%=
(s$+".blue"):
ccc%=0
42,"Blue file "+s$+".blue not found"
X/c%=
c%=0
42,"File "+s$+" not found"
close:
colourindex=255
&66f4d
;pcd%
ftype
&FF9:flag=0
uc(s$),".HIP.")
uc(s$),":HIP.")
a flag=300:I%=
uc(s$),"HIP.")
s$,I%)="LOP.":cc%=
cc%=0
42,"Can't find Lop file "+s$
&FF0:
#c%=0:S$="":
I%=1
4:S$+=
S$="II*"+
0 flag=1500:bigendian=
S$="MM"+
0+"*" flag=1500:bigendian=
&DFA:flag=800:
dir flag=801
&DE2:flag=1000
&CBE:flag=3800
&BE8:
(pcd%
1)=0 flag=3600
&7A0:flag=1200
&69d:flag=2000
&699:flag=700
&698:flag=100
&697:flag=1900
&691:flag=2600
&690:flag=2500
&666:flag=666
&601:flag=3000
&371:flag=3100
&300:flag=1300:
dir flag=1301
4:flag=900:
dir flag=901
6:flag=950
flag=-1
#c%=0:S$="":
I%=1
22:S$+=
S$,7)="FSIfile" flag=2100
flag=-1
S$,8)="SIMPLE " flag=2800
flag=-1
S$,8))="MERCSOFT"
S$,8))="SNAPSHOT"flag=902
flag=-1
S$,8))="MERCSOF1" flag=903
flag=-1
S$,13))="IRLAM YUV 411" flag=2250
flag=-1
S$,5)="Irlam" flag=2200
flag=-1
S$,2)="BM" flag=2400:riffoff%=0
flag=-1
S$,4)="RIFF"
S$,9,8)="RDIBdata"
S$,21,2)="BM" flag=2400:riffoff%=20
flag=-1
S$,4)="GIF8" flag=500
flag=-1
S$,5)="AV_VO" flag=600
flag=-1
S$,4)=
&95 flag=1100
flag=-1
S$,4)=
8 flag=1400
flag=-1
S$,4)=
1 flag=2900
flag=-1
S$,4)="RIX3" flag=2700
flag=-1
S$,4)="II*"+
0 flag=1500:bigendian=
flag=-1
S$,4)="MM"+
0+"*" flag=1500:bigendian=
flag=-1
S$,2)=
&CC flag=2300
flag=-1
S$,2)="P4"
S$,2)="P5"
S$,2)="P6" flag=3300:info$=""
flag=-1
S$,3)="P15" flag=3400
flag=-1
S$,3)="PIC" flag=3500
flag=-1
S$,3)="T-I" flag=3800
flag=-1
S$,3))="P13" flag=3450
flag=-1
S$,4)="FORM"
S$,9,4)="ILBM" flag=1600
flag=-1
S$,8)="ALPIAR12" flag=3900:colourindex=4095
flag=-1
S$,8)="ALPIAR16" flag=3905:colourindex=65535
flag=-1
S$,7,4)="JFIF"
ftype=&C85
*jpegblk%=
dim(20):
cachesize(jpegblk%)
cache%<
snb_needdjpeg(c%)
#c%:c%=0:X%=
"Run:djpeg"
subtask("djpeg -maxmemory 512 "+s$+" <wimp$scrap2>")
"XOS_CLI","djpeg -maxmemory 512 "+s$+" <wimp$scrap2>"
subtask("djpeg -maxmemory 512 "+s$+" <wimp$scrap2>")
"<wimp$scrap2>":
c%=0
>scrapf%=
:flag=3300:info$="JPEG (JFIF) file converted to "
flag=3700
flag=-1
S$,5)="btpc "
#c%:c%=0:
subtask("<ChangeFSI$Dir>.btpc "+s$+" <wimp$scrap2>")
"<wimp$scrap2>":
c%=0
7scrapf%=
:flag=3300:info$="BTPC file converted to "
flag=-1
#c%=&10:S$="":
I%=1
9:S$+=
S$="MILLIPEDE" flag=200
flag=-1
#c%=&41:S$="":
I%=1
8:S$+=
S$,4)="PNTG" flag=1800:st%=&280
flag=-1
#c%=196:S$="":
I%=1
8:S$+=
S$,4)="PNTG" flag=1800:st%=&2e2
flag=-1
#c%=522:S$="":
I%=1
8:S$+=
&fe flag=1850
flag=-1
#c%=0:
#c%=10
C%<6
C%<>1
#c%=1 flag=1900
flag=-1
uc(s$),".PCX.")
uc(s$),":PCX.")
s$,4)="/PCX" flag=1900
flag=-1
uc(s$),".IMAGE.")
uc(s$),":IMAGE.") flag=400
flag=-1
s$,4))=".RAW" flag=100
flag=-1
s$,3))="TGA" flag=2000
flag=-1
s$,3))="VDA" flag=2000
flag=-1
uc(s$),".PIC.")
uc(s$),":PIC.") flag=700
flag=-1
uc(s$),".IMG.")
uc(s$),":IMG.")
s$,4)="/IMG" flag=1400
flag=-1
uc(s$),".DSP.")
uc(s$),":DSP.")
s$,4)="/DSP" flag=1700
flag=-1
s$,4))="/RGB" flag=3200
flag=-1
s$,4))="/PCD"
ftype=&be8)
((pcd%
1)=1)
#c%:c%=0:
subtask("<ChangeFSI$Dir>.hpcdtoppm -3 -a "+s$+" <wimp$scrap2> { > <ChangeFSI$Dir>.pcdtemp }")
"<wimp$scrap2>":scrapf%=
:flag=3300:info$="PhotoCD file converted to "
flag=-1
close:
42,"Sorry: format not recognised - please try again or contact your supplier"
Cstep24=1:input=8:ham=0:planar%=0:bigendianbits=
:r$="FN"+
flag
9compression=0:hpredict%=1:striprows%=-1:cachebytes%=
xdiv%=0
ydiv%=0 scale%=
r%(colourindex)
g%(colourindex),b%(colourindex)
flag
@quant%=4:
#c%=4:F%=
W+&1C:
#c%=F%:st%=
W+F%-&20:K%=
W+F%-&20
sm<256
53,sm,3
,,I%
st%=F%+12
defpal2
ipal(2)
#c%=F%-16:sx%=(
W+1)*32:rowbytes%=sx%>>3:input=1
W+1:I%=
W:sx%-=31-
st%=F%+12
defpal4
ipal(4)
#c%=F%-16:sx%=(
W+1)*16:rowbytes%=sx%>>2:input=2
!sy%=
W+1:I%=
W:sx%-=(31-
st%=F%+12
defpal16
ipal(16)
#c%=F%-16:sx%=(
W+1)*8:rowbytes%=sx%>>1:input=4
!sy%=
W+1:I%=
W:sx%-=(31-
63,255:
st%=F%+12
defpal
K%>st% K%=st%
K%-12-F%=2048
I%=255
#c%=&38
C%=0
255:D%=
9r%(C%)=
#c%/255*F:g%(C%)=
#c%/255*F:b%(C%)=
#c%/255*F
ipal63
#c%=F%-16:sx%=(
W+1)*4:rowbytes%=sx%:sy%=
W+1:I%=
W:sx%-=(31-
42,"Not understood RISC OS sprite"
@r$="FN8":
53,sm,4
,,nx:
53,sm,5
,,ny:nx=1<<nx:ny=1<<ny
scale% xmul%=xmul%*nx/2:ymul%=ymul%*ny/2
Vinfo$="RISC OS sprite, mode "+
sm+" "+
sx%+" by "+
sy%+" pixels, "+
bits(input)
bpp%=sm>>>27:
bpp%
1:bpp%=1:r$="FN8":
st%=F%+12
defpal2
newropal(2)
2:bpp%=2:r$="FN8":
st%=F%+12
defpal4
newropal(4)
3:bpp%=4:r$="FN8":
st%=F%+12
defpal16
newropal(16)
4:bpp%=8:r$="FN8":
st%=F%+12
defpal
newropal(256)
5:bpp%=16:r$="FN16":
st%=F%+12
rpal%(255),gpal%(255):step24=2
C%=0
"gpal%(C%)=(C%>>5)<<8
+rpal%(C%)=((C%>>2)
31)<<16
3)<<11
C%=0
31:r%(C%)=C%/31*F:
:g%()=r%():b%()=r%()
6:bpp%=32:r$="FN24":
st%=F%+12
nopal
!rbo%=0:gbo%=1:bbo%=2:step24=4
8:bpp%=24:r$="FN24":
st%=F%+12
nopal
rbo%=0:gbo%=1:bbo%=2
42,"Not understood new format RISC OS sprite bpp"
(nx=(sm>>1)
&1fff:ny=(sm>>14)
&1fff
scale% xdiv%=xdiv%*nx:ydiv%=ydiv%*ny:xmul%=xmul%*90:ymul%=ymul%*90
#c%=F%-16:rowbytes%=(
W+1)*4:sy%=
W+1:I%=
W:sx%=(rowbytes%*8-(31-
W))/bpp%:input=bpp%
Linfo$="New RISC OS sprite, "+
sx%+" by "+
sy%+" pixels, "+
bits(input)
bpp%=32 input=24
#c%=st%:cache%=
Equant%=8:
#c%=0:sx%=
HW:sy%=
nopal:input=24:rowbytes%=sx%*3+2
5rbo%=2:gbo%=2+sx%:bbo%=2+2*sx%:r$="FN24":cache%=
Linfo$="QRT .raw image, "+
sx%+" by "+
sy%+" pixels, 24 bits per pixel"
Gquant%=8:
#c%=5:sx%=
HW:sy%=
HW:sx%=(
HW-sx%+2)/2:sy%=(
HW-sy%+2)/2
#c%=&1a:cadsoft%=
#c%=&200
C%=0
255:r%(C%)=
#c%/255*F:
C%=0
255:g%(C%)=
#c%/255*F:
C%=0
255:b%(C%)=
#c%/255*F:
#c%=&600:st%=&600:cache%=
cadsoft%=2
Crep%=0:r$="FN1100":plbuff%=
dim(sx%):plbytes%=sx%:cachebytes%=
r$="FN8":rowbytes%=sx%
"^info$="Cadsoft type "+
cadsoft%+" image, "+
sx%+" by "+
sy%+" pixels, 8 bits per pixel"
$Iquant%=5:
#c%=&2c:st%=
W+(&38-&2c):
#cc%=&2c:stcc%=
W1(cc%)+(&38-&2c)
#c%=&1c:sx%=(
W+1)*4:sy%=
#c%=st%:
#cc%=stcc%
rpal%(255),gpal%(255):input=16:cache%=
:rowbytes%=sx%
C%=0
(.rpal%(C%)=C%
64)<<2
&38)<<13
)Sgpal%(C%)=(C%
4)<<1
((C%
3)<<1
&60)>>2)<<8
128)>>3)<<16
C%=0
31:r%(C%)=C%/31*F:
:g%()=r%():b%()=r%()
,+pbuff%=
dim(sx%):
scale% ymul%=ymul%*2
-Iinfo$="ArVis image, "+
sx%+" by "+
sy%+" pixels, 15 bits per pixel"
/Equant%=8:
#c%=0:sx%=
beHW:sy%=
beHW:X%=
beHW:st%=
#c%+X%:
#c%=st%
0Vplbuff%=
dim(sx%*3):plbytes%=sx%*3:rb%=plbuff%:gb%=plbuff%+1:bb%=plbuff%+2:rbo%=-1
nopal:input=24:rep%=0:cachebytes%=
:cache%=
:step24=3
2`info$="RT image. run length encoded image, "+
sx%+" by "+
sy%+" pixels, 24 bits per pixel"
4,compression=5:
#c%=6:GIFsx=
HW:GIFsy=
58GIF=
#c%:GIFback=
#c%:GIFext=
#c%:quant%=(GIF
7)+1
GIF
&80
C%=0
(1<<quant%)-1
89r%(C%)=
#c%/255*F:g%(C%)=
#c%/255*F:b%(C%)=
#c%/255*F
>$GIFgcesz=
#c%+GIFgcesz
GIFgcesz=0:I%=
I%<>
42,"GIF file without , in right place"
GIFext<>0
GIFext<>49
GIFext>49
D*xdiv%=xdiv%*64:xmul%=xmul%*(GIFext+15)
F*ydiv%=ydiv%*(GIFext+15):ymul%=ymul%*64
I,GIFleft=
HW:GIFright=
HW:sx%=
HW:sy%=
GIFsx<sx%
GIFsy<sy%
info%
"GIF file with bigger image inside:"
"Screen ";GIFsx"x by "GIFsy"y; image "sx%"x by "sy%"y"
"Continue with monitor's size [Y or y]?"A$
A$="Y"
A$="y" sx%=GIFsx:sy%=GIFsy
"Continuing with ";sx%"x by "sy%"y"
S*GIF=
GIF
&40 flag=501:r$="FN8"
TJsetcodes%=
#c%:clearcode%=1<<setcodes%:st%=
#c%:cache%=
:cachebytes%=
table%(1<<12):stk%=
dim(1<<13):buf%=
dim(280):plbuff%=
dim(sx%)
I%=0
clearcode%-1:table%(I%)=I%:
WCinfo$="GIF file, "+
sx%+" by "+
sy%+" pixels, "+
bits(quant%)
Y quant%=8:
#c%=&5c:
C%=0
Z9r%(C%)=
#c%/255*F:g%(C%)=
#c%/255*F:b%(C%)=
#c%/255*F
#c%=&36e:sy%=
HW:sx%=
]5st%=&380:
#c%=st%:rowbytes%=sx%:r$="FN8":cache%=
^Ginfo$=".PIC image, "+
sx%+" by "+
sy%+" pixels, 8 bits per pixel"
`$quant%=8:
#c%=0:a$=
#c%:st%=
a!sx%=
a$:sy%=
a$," ")))
nopal:input=24:step24=3:rowbytes%=sx%*3:r$="FN24"
c!rbo%=0:gbo%=1:bbo%=2:cache%=
dLinfo$="MTV .pic image, "+
sx%+" by "+
sy%+" pixels, 24 bits per pixel"
f*sx%=512:sy%=256:
scale% ymul%=ymul%*2
g4plbuff%=
dim(sx%):rep%=0:wt%=0:wtsx%=plbuff%+sx%
cache%=
:cachebytes%=
C%=0
255:r%(C%)=(C%
63)/63*F:
:g%()=r%():b%()=r%():quant%=6
jJinfo$="Watford digitiser picture, 512 by 256 pixels, 6 bits per pixel"
l<sx%=512:sy%=256:input=24:quant%=6:
scale% ymul%=ymul%*2
m0rep1%=0:wt1%=0:rep2%=0:wt2%=0:rep3%=0:wt3%=0
n=buff%=
dim(sx%*3):rb%=buff%:gb%=buff%+sx%:bb%=buff%+2*sx%
o:wtsx1%=buff%+sx%:wtsx2%=buff%+2*sx%:wtsx3%=buff%+3*sx%
C%=0
255:r%(C%)=(C%
63)/63*F:
:g%()=r%():b%()=r%()
qRinfo$="Triple Watford digitiser picture, 512 by 256 pixels, 18 bits per pixel"
s(quant%=8:st%=0:
#c%=0:
#c%=65536
t8sx%=256:sy%=256:
scale% ymul%=ymul%*2:xmul%=xmul%*2
sx%=512:sy%=512
C%=0
255:r%(C%)=C%/255*F:
:g%()=r%():b%()=r%():rowbytes%=sx%:r$="FN8":cache%=
y?info$="AIM .raw image, 256 by 256 pixels, 8 bits per pixel"
quant%=4:
#c%=65536
|8sx%=256:sy%=256:
scale% ymul%=ymul%*2:xmul%=xmul%*2
sx%=512:sy%=512
=buff%=
dim(sx%*3):rb%=buff%:gb%=buff%+sx%:bb%=buff%+sx%*2
C%=0
255:r%(C%)=C%/255*F:
:g%()=r%():b%()=r%()
Oinput=24:info$="Hawk V9 Triple image, 256 by 256 pixels, 24 bits per pixel"
Bquant%=4:
#c%=8:sx%=
W:rowbytes%=sx%*3/2:sy%=
W:st%=20:
#c%=20
scale% ymul%=ymul%*2
Mplbuff%=
dim(sx%*3):rb%=plbuff%:gb%=plbuff%+sx%:bb%=plbuff%+sx%*2:rbo%=-1
C%=0
255:r%(C%)=(C%
&F)/&F*F:
:g%()=r%():b%()=r%():cache%=
dinput=24:info$="Hawk V9/Snapshot Colour image, "+
sx%+" by "+
sy%+" pixels, 12 bits per pixel"
\quant%=5:
#c%=8:sx%=
W:rowbytes%=sx%*2:sy%=
W:st%=20:
#c%=20:cache%=
:r$="FN16":flag=700
rpal%(255),gpal%(255):input=16:step24=2
C%=0
"gpal%(C%)=(C%>>5)<<8
+rpal%(C%)=((C%>>2)
31)<<16
3)<<11
C%=0
31:r%(C%)=C%/31*F:
:g%()=r%():b%()=r%()
ainput=16:info$="Hawk V9 mk II Colour image, "+
sx%+" by "+
sy%+" pixels, 16 bits per pixel"
@quant%=8:
#c%=0:sx%=512:rowbytes%=512:sy%=512:st%=0:flag=900
C%=0
255:r%(C%)=C%/255*F:
:g%()=r%():b%()=r%():r$="FN8":cache%=
Finfo$="Wild Vision V12 image, 512 by 512 pixels, 8 bits per pixel"
1000
Uquant%=4:sx%=640:sy%=256:
defpal:st%=
W:r$="FN"+
(1000+
scale% ymul%=ymul%*2
%buff%=
dim(sx%):ctable%=
dim(st%)
12,4,c%,ctable%,st%:st%=
.pa%=ctable%:rep%=0:rep2%=0:pasx%=buff%+sx%
Ainfo$="ProArtisan image, 640 by 256 pixels, 8 bits per pixel"
1100
@quant%=1:
#c%=4:sx%=
beW:sy%=
beW:input=
beW:bigendianbits=
beW:S%=
Kcache%=
S%=2 cachebytes%=
:info$="Byte Encoded "
info$="":r$="FN8"
I%=0
D%/3-1:r%(I%)=
#c%/255*F:
I%=0
D%/3-1:g%(I%)=
#c%/255*F:
I%=0
D%/3-1:b%(I%)=
#c%/255*F:
input
1:r%(0)=F:g%(0)=F:b%(0)=F
4,8:
nopal
nopal
input
1:rowbytes%=(sx%+15>>4)<<1
4:rowbytes%=(sx%+3>>2)<<1
8:rowbytes%=(sx%+1>>1)<<1
24:rowbytes%=(3*sx%+1>>1)<<1:r$="FN24":rbo%=0:gbo%=1:bbo%=2:step24=3
S%=1 bbo%=0:rbo%=2
42,"Can't do this Sun pixrect"
Nst%=D%+&20:rep%=0:
cachebytes% plbuff%=
dim(rowbytes%):plbytes%=rowbytes%
Dinfo$+="Sun image, "+
sx%+" by "+
sy%+" pixels, "+
bits(input)
1200
>quant%=8:sx%=800:sy%=800:st%=1600:
#c%=st%:vflip%=
vflip%
nopal:r$="FN8":rowbytes%=sx%:cache%=
Iinfo$="TimeStep satellite image, 800 by 800 pixels, 8 bits per pixel"
1300
@quant%=8:sx%=128:sy%=256:st%=0:
#c%=0:
scale% xmul%=xmul%*2
nopal:r$="FN8":rowbytes%=sx%:cache%=
@info$="satellite image, 128 by 256 pixels, 8 bits per pixel"
1301
<input=24:quant%=8:sx%=128:sy%=256:
scale% xmul%=xmul%*2
Obuff%=
dim(sx%*3):rb%=buff%:gb%=buff%+sx%:bb%=buff%+2*sx%:
nopal:r$="FN901"
Hinfo$="Triple satellite image, 128 by 256 pixels, 24 bits per pixel"
1400
&planar%=
#c%=0:Z%=
Z%>255
+st%=
beHW*2:planes%=
beHW:patlen%=
+pw%=
beHW:ph%=
beHW:sx%=
beHW:sy%=
Cst%=
HW*2:input=
HW:patlen%=
HW:pw%=
HW:ph%=
HW:sx%=
HW:sy%=
scale%
#xmul%=xmul%*pw%:xdiv%=xdiv%*282
#ymul%=ymul%*ph%:ydiv%=ydiv%*282
Wrowbytes%=sx%+7>>3:pbuff%=
dim(sx%):plbytes%=rowbytes%*planes%:buff%=
dim(plbytes%)
#c%=st%:vrep%=0
C%=0
(1<<planes%)-1:r%(C%)=F-C%/((1<<planes%)-1)*F:
:g%()=r%():b%()=r%()
Dinfo$="IMG file, "+
sx%+" by "+
sy%+" pixels, "+
bits(planes%)
1500
#c%=4:dir%=
tiff(4):
#c%=dir%
6rgb=
:greyunit=100:planar%=1:fillorder=1:resunit=2
)xnum%=90:xdenom%=1:ynum%=90:ydenom%=1
tiff(3):
Z%=1
tiff(3):D%=
tiff(3):C%=
tiff(4)
C%>1 V%=
tiff(4)
D%=2
#c%=dir%+2+Z%*12
D%<4 V%=
tiff(D%):
#c%=dir%+2+Z%*12
tiff(4)
info%
"Read tag ";T%" datatype "D%" count "C%" value/pointer "V%
256:sx%=V%
257:sy%=V%
258:
C%>1
D%*C%>6
#c%=V%:quant%=
tiff(D%)
)input=quant%:
I%=1
C%-1:V%=
tiff(D%)
V%<>quant%
42,"Can't do RGB TIFF with different numbers of bits per pixel"
input+=V%
nopal
quant%=V%
&FF:input=quant%
I%=0
(1<<quant%)-1:r%(I%)=I%/((1<<quant%)-1)*F:
g%()=r%():b%()=r%()
#c%=dir%+2+Z%*12
quant%=V%:input=quant%
I%=0
(1<<quant%)-1:r%(I%)=I%/((1<<quant%)-1)*F:
g%()=r%():b%()=r%()
259:compression=V%
262:photometric=V%:
V%=0 invert%=
invert%
266:fillorder=V%
273:stc%=C%:stv%=V%:std%=D%
277:sampperpix%=V%:input=quant%*V%:rgb=V%=3
278:striprows%=V%
279:stcbyte%=C%:stvbyte%=V%:stdbyte%=D%
282:
#c%=V%:xnum%=
tiff(4):xdenom%=
tiff(4)
#c%=dir%+2+Z%*12
283:
#c%=V%:ynum%=
tiff(4):ydenom%=
tiff(4)
#c%=dir%+2+Z%*12
284:planar%=V%:
planar%=2 input=quant%
290:greyunit=10^V%
291:
#c%=V%:
I%=0
C%-1:r%(I%)=
tiff(D%)/greyunit/2*F:
g%()=r%():b%()=r%()
#c%=dir%+2+Z%*12
296:resunit=V%
317:hpredict%=V%
320:
#c%=V%:
I%=0
C%/3-1:r%(I%)=
tiff(3)/65535*F:
I%=0
C%/3-1:g%(I%)=
tiff(3)/65535*F:
I%=0
C%/3-1:b%(I%)=
tiff(3)/65535*F:
#c%=dir%+2+Z%*12
info%
"Ignoring tag ";T%" datatype "D%" count "C%" value/pointer "V%
st%(stc%):
stc%>1
#c%=stv%:
I%=0
stc%-1:st%(I%)=
tiff(std%):
st%(0)=stv%
compression
0,1:info$=""
2:info$="CCITT Group 3 compressed "
5:info$="LZW compressed ":r$="FN1505"
hpredict%=2
info$+="horizontal differenced "
hpredict%>2 info$+=" unknown predictor ("+
hpredict%+") "
'setcodes%=8:clearcode%=1<<setcodes%
table%(1<<12):stk%=
dim(1<<13):buf%=
dim(280)
I%=0
clearcode%-1:table%(I%)=I%:
32773:info$="PackBits compressed ":r$="FN1501"
6:info$="JPEG compressed "
info$="Compress "+
compression+" - unknown "
Dinfo$+="TIFF file, "+
sx%+" by "+
sy%+" pixels, "+
bits(input)
Tbigendianbits=fillorder=1:
#c%=st%(0):stripptr=0:
striprows%>=sy% striprows%=-1
input
1:rowbytes%=sx%+7>>3
2:rowbytes%=sx%+3>>2
4:rowbytes%=sx%+1>>1
8:rowbytes%=sx%
24:rowbytes%=3*sx%
32:rowbytes%=4*sx%:
photometric<>5
42,"32 bpp TIFF but not CMYK"
42,"Can't do "+
bits(input)+" TIFF"
planar%=2 rowbytes%=rowbytes%*sampperpix%
planar%<>1
rgb<>0
42,"Can't do this style of TIFF yet"
planar%=
compression<2
)Tcache%=
:stripptr=-1:r$="FN8":
input=24 rbo%=0:gbo%=1:bbo%=2:step24=3:r$="FN24"
input=32 rbo%=0:gbo%=1:bbo%=2:step24=4:r$="FN24":r%()=F-r%():g%()=F-g%():b%()=F-b%():input=24
compression=5
compression=32773
--cache%=
:cachebytes%=rowbytes%*striprows%
.0plbuff%=
dim(rowbytes%):rowstogo%=striprows%
input=24 rb%=plbuff%:gb%=plbuff%+1:bb%=plbuff%+2:r$="FN"+
r$,3)+10):step24=3:rbo%=-1
1.buff%=
dim(rowbytes%):rowstogo%=striprows%
input=24 rb%=buff%:gb%=buff%+1:bb%=buff%+2:r$="FN"+
r$,3)+10):step24=3
scale%
S%=resunit:
S%=2 S%=90
S%=3 S%=35
8,xdiv%=xdiv%*xnum%:xmul%=xmul%*xdenom%*S%
9,ydiv%=ydiv%*ynum%:ymul%=ymul%*ydenom%*S%
r$="FN1500" r$="FN8"
1600
#c%=12:camg=0:planar%=
>*S$=
#c%:S%=
"BMHD":sx%=
beHW:sy%=
beHW:S%=
W:planes%=
#c%:masking%=
#c%=1
A6compression=
#c%:S%=
HW:U%=
#c%:V%=
#c%:S%=
scale% ymul%=ymul%*V%:ydiv%=ydiv%*U%
I%=0
(1<<planes%)-1:r%(I%)=I%/((1<<planes%)-1)*F:
:g%()=r%():b%()=r%()
"CMAP":S%=
#c%+S%:
I%=0
(1<<planes%)-1:r%(I%)=(
#c%>>4)/15*F
E1g%(I%)=(
#c%>>4)/15*F:b%(I%)=(
#c%>>4)/15*F:
#c%=S%:
info%
"Warning: truncated IFF CMAP information to 4 bits"
"CAMG":camg=
info%
"Amiga viewport mode ";~camg
"BODY":st%=
info%
"Ignoring IFF property "S$" size ";S%
#c%+S%
S$="BODY":
compression info$="Compressed "
info$=""
M,ham=(camg
&800)<>0:
ham info$+="HAM "
N5half=(camg
&80)<>0:
half info$+="half-bright "
half half%=1<<planes%-1:
I%=0
half%-1:r%(I%+half%)=r%(I%)/2:g%(I%+half%)=g%(I%)/2:b%(I%+half%)=b%(I%)/2:
PEinfo$+="IFF file, "+
sx%+" by "+
sy%+" pixels, "+
bits(planes%)
masking% info$+=" with mask (ignored)"
R7rowbytes%=(sx%+15>>4)<<1:plbytes%=rowbytes%*planes%
S9pbuff%=
dim(sx%):r$="FN"+
(1600+compression):cache%=
compression
U(cachebytes%=
:plbuff%=
dim(plbytes%)
WRrealrowbytes%=rowbytes%:rowbytes%=plbytes%:
masking% rowbytes%+=realrowbytes%
#c%=st%
1700
[Bsx%=640:rowbytes%=80:sy%=350:planes%=4:plbytes%=4*80:planar%=
\3buff%=
dim(80*4):pbuff%=
dim(640):G=F/3:H=F*2/3
](r%()=0,0,0,0,F,F,F,H,G,G,G,G,F,F,F,F
^(g%()=0,0,F,F,0,0,F,H,G,G,F,F,G,G,F,F
_(b%()=0,F,0,F,0,F,0,H,G,F,G,F,G,F,G,F
`Vmasking%=
:r$="FN1600":st%=16:
#c%=16:cache%=
:realrowbytes%=80:rowbytes%=plbytes%
aSinfo$="PC EGA '.dsp' file, 640 by 350 pixels, 4 bits per pixel (fixed palette)"
1800
c?sx%=72*8:sy%=720:quant%=1:input=1:
#c%=st%:plbuff%=
dim(72)
cache%=
:cachebytes%=
eQr%(0)=F:g%(0)=F:b%(0)=F:bigendianbits=
:rowbytes%=72:r$="FN1501":rowstogo%=-1
scale% xmul%=xmul%*90:xdiv%=xdiv%*72:ymul%=ymul%*90:ydiv%=ydiv%*72
g>info$="MacPaint file, 576 by 720 bits, creator id "+
S$,4)
1850
#c%=552
done%=
code%=
beHW:
code%
&01:
pCrowbytes%=
beHW:
(rowbytes%
&8000)=0
42,"PICT without Pixmap"
q3sy%=
beHW:sx%=
beHW:sy%=
beHW-sy%:sx%=
beHW-sx%
r<junk%=
HW:packtype%=
beHW:junk%=
W:resx%=
beW:resy%=
beHW<>0
42,"ChangeFSI expected Mac PICT2 pixeltype=Chunky"
t&bpp%=
beHW:junk%=
beHW:junk%=
u$junk%=
beW:junk%=
beW:junk%=
junk%=
beW:junk%=
w`C%=
beHW:
I%=0
C%:J%=
beHW:r%(J%)=
beHW/65535*F:g%(J%)=
beHW/65535*F:b%(J%)=
beHW/65535*F:
done%=
&9A:junk%=
W:rowbytes%=
beHW:
(rowbytes%
&8000)=0
42,"PICT without Pixmap"
z3sy%=
beHW:sx%=
beHW:sy%=
beHW-sy%:sx%=
beHW-sx%
{<junk%=
HW:packtype%=
beHW:junk%=
W:resx%=
beW:resy%=
beHW<>16
42,"ChangeFSI expected Mac PICT2 pixeltype=RGBDirect"
}'bpp%=
beHW:comps%=
beHW:junk%=
junk%=
beW:junk%=
junk%=
beHW:junk%=
bpp%>16
nopal
J%=2^(bpp%
I%=0
J%-1:r%(I%)=I%/(J%-1)*F:
:g%()=r%():b%()=r%()
bpp%=32
comps%=3 bpp%=24:rowbytes%=3*sx%
done%=
42,"ChangeFSI can't understand Mac PICT2 code "+
~code%
done%
3junk%=
beHW:junk%=
beHW:junk%=
beHW:junk%=
3junk%=
beHW:junk%=
beHW:junk%=
beHW:junk%=
junk%=
Ncache%=
:cachebytes%=
:bigendianbits=
:st%=
#c%:rowbytes%=rowbytes%
&8000
scale% xmul%=xmul%*90*65536:xdiv%=xdiv%*resx%:ymul%=ymul%*90*65536:ydiv%=ydiv%*resy%
Binfo$="Mac PICT2, "+
sx%+" by "+
sy%+" pixels, "+
bits(bpp%)
&plbuff%=
dim(rowbytes%):
bpp%>8
Trbo%=-1:rb%=plbuff%+sx%:gb%=plbuff%+sx%*2:bb%=plbuff%+sx%*3:r$="FN1851":input=24
comps%=3 rb%=plbuff%:gb%=plbuff%+sx%:bb%=plbuff%+sx%*2
1900
#c%=1:C%=
E%<>1
42,"ZSoft .PCX file with unknown encoding"
#c%:sx%=
HW:sy%=
HW:sx%=
HW+1-sx%:sy%=
HW+1-sy%
scale% xmul%=xmul%*90:xdiv%=xdiv%*
HW:ymul%=ymul%*90:ydiv%=ydiv%*
#c%=65:planes%=
#c%:planar%=planes%>1:rowbytes%=
HW:bpp%=E%*planes%
pcxpal=16:
bpp%>4
C%=5
#c%-769:
#c%=12 pcxpal=
#c%-768
#c%=pcxpal:E%=0:
C%=0
(1<<bpp%)*3-1:E%=E%
info%
".PCX palette mask established at ";~E%
E%=0
C%=0
(1<<bpp%)-1:r%(C%)=C%/((1<<bpp%)-1)*F:
:g%()=r%():b%()=r%()
#c%=pcxpal:
C%=0
(1<<bpp%)-1
Er%(C%)=(
E%)/E%*F:g%(C%)=(
E%)/E%*F:b%(C%)=(
E%)/E%*F
rewind
Lplbytes%=rowbytes%*planes%:plbuff%=
dim(plbytes%):cache%=
:cachebytes%=
planar% pbuff%=
dim(sx%)
input=bpp%:bigendianbits=
:r$="FN1100"
Hinfo$="ZSoft .PCX file, "+
sx%+" by "+
sy%+" pixels, "+
bits(bpp%)
2000
#c%=0:L%=
#c%:C%=
#c%:I%=
#c%:J%=
HW:K%=
HW:M%=
Dsx%=
W:sx%=
HW:sy%=
HW:B%=
#c%:ID%=
&10 hflip%=
hflip%
(ID%
&20)=0 vflip%=
vflip%
#c%+L%:
M%=&18
C%=J%
9b%(C%)=
#c%/255*F:g%(C%)=
#c%/255*F:r%(C%)=
#c%/255*F
nopal
1,2,3:cache%=
B%>8
B%>16
Linput=24:bbo%=0:gbo%=1:rbo%=2:step24=B%
8:r$="FN24":rowbytes%=step24*sx%
rowbytes%=sx%*2
rpal%(255),gpal%(255):input=16:step24=2:r$="FN16"
C%=0
&gpal%(C%)=(C%>>5)<<8
31)<<16
%rpal%(C%)=(C%>>2)
3)<<11
C%=0
31:r%(C%)=C%/31*F:
:g%()=r%():b%()=r%()
r$="FN8":rowbytes%=sx%
Kinfo$="Truevision TGA image, "+
sx%+" by "+
sy%+" pixels, "+
bits(B%)
9,10,11:step24=B%
8:rowbytes%=step24*sx%:buff%=
dim(rowbytes%)
B%>8
B%>16
:input=24:bb%=buff%:gb%=buff%+1:rb%=buff%+2:r$="FN2002"
rpal%(255),gpal%(255):input=16:step24=2:r$="FN2001"
C%=0
&gpal%(C%)=(C%>>5)<<8
31)<<16
%rpal%(C%)=(C%>>2)
3)<<11
C%=0
31:r%(C%)=C%/31*F:
:g%()=r%():b%()=r%()
Oinfo$="Truevision TGA RLE image, "+
sx%+" by "+
sy%+" pixels, "+
bits(B%)
2100
?quant%=6:sx%=512:rowbytes%=2*sx%:sy%=256:cache%=
:r$="FN16"
rpal%(255),gpal%(255):input=16:step24=2
C%=0
gpal%(C%)=C%>>3
7)<<11
%rpal%(C%)=(C%
7)<<8
(C%>>3)<<16
C%=0
31:r%(C%)=C%/31*F:
:b%()=r%()
C%=0
63:g%(C%)=C%/63*F:
scale% ymul%=ymul%*2
Hinfo$="Pineapple image, 512 by 256 pixels, 16 bits per pixel":
#c%=7
2200
9quant%=8:step24=1:
#c%=0:s$=
#c%:E%=
s$,":"):st%=
;sx%=
s$,E%+1):sy%=
s$,E%+2+
sx%):
nopal:input=24
Arowbytes%=sx%*3:rbo%=0:gbo%=sx%:bbo%=2*sx%:cache%=
:r$="FN24"
Iinfo$="Irlam image, "+
sx%+" by "+
sy%+" pixels, 24 bits per pixel"
2250
#c%=16:sx%=
W:sy%=
rpal%(255),gpal%(255),bpal%(255),table%(255)
C%=0
255:D%=C%
table%(C%)=(D%-16)/219*F
128 D%-=256
)r%(C%)=
(D%/160*F):b%(C%)=
(D%/126*F)
>g%(C%)=
(-D%/160*rwt/gwt*F):gpal%(C%)=
(-D%/126*bwt/gwt*F)
,table%()=0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
5st%=32:
#c%=32:cache%=
:rowbytes%=2*sx%:input=411
>info$="Irlam YUV 4:1:1 file "+
sx%+" by "+
sy%+" pixels"
2300
#c%=6:sx%=
HW:sy%=
HW:D%=
#c%:ncolors%=
#c%:input=24
;vflip%=
vflip%:quant%=
#c%:ncmap%=
#c%:cmaplen%=1<<
nopal:back%=
dim(4):!back%=0
clrfirst%=D%
2)=0
I%=0
ncolors%-1:back%?I%=
(ncolors%
1)=0
4 alpha%=
dim(sx%)
ncmap%>0
I%=0
cmaplen%-1:r%(I%)=
HW/&FF00*F:
I%=0
cmaplen%-1:g%(I%)=
HW/&FF00*F:
I%=0
cmaplen%-1:b%(I%)=
HW/&FF00*F:
#c%+1
Hst%=
#c%:buff%=
dim(sx%*3):rb%=buff%:gb%=buff%+1*sx%:bb%=buff%+2*sx%
rewind
Rinfo$="Utah rle image, "+
sx%+" by "+
sy%+" pixels, "+
bits(ncolors%*quant%)
2400
#c%=riffoff%+&0a:st%=
W:pal%=
W:sx%=
W:sy%=
pal%
#c%=riffoff%+&18:input=
HW:compression=0
#c%=riffoff%+&1c:input=
HW:compression=
#c%=riffoff%+&26:xppm=
W:yppm=
xppm<>0
yppm<>0
scale%<>0
%xdiv%=xdiv%*xppm:xmul%=xmul%*3543
%ydiv%=ydiv%*yppm:ymul%=ymul%*3543
42,"Unknown .BMP variant ("+
pal%+")"
"bigendianbits=
:vflip%=
vflip%
input
1:rowbytes%=sx%+7>>3
4:rowbytes%=sx%+1>>1
8:rowbytes%=sx%
16:rowbytes%=sx%*2:r$="FN16":step24=2
rpal%(255),gpal%(255)
%rmask%=&7c00:gmask%=42:bmask%=-42
compression=3
#c%=riffoff%+14+pal%:rmask%=
W:gmask%=
W:bmask%=
W:compression=0
rmask%=&7c00
C%=0
&gpal%(C%)=(C%>>5)<<8
31)<<16
%rpal%(C%)=(C%>>2)
3)<<11
C%=0
31:r%(C%)=C%/31*F:
:g%()=r%():b%()=r%()
rmask%=&f800
C%=0
%&gpal%(C%)=(C%>>5)<<8
31)<<16
&%rpal%(C%)=(C%>>3)
7)<<11
C%=0
31:r%(C%)=C%/31*F:
:b%()=r%()
C%=0
63:g%(C%)=C%/63*F:
24,32
,"rbo%=2:gbo%=1:bbo%=0:r$="FN24"
C%=0
255:r%(C%)=C%/255*F:
:g%()=r%():b%()=r%()
.1r$="FN24":step24=input/8:rowbytes%=sx%*step24
/"rmask%=-1:gmask%=42:bmask%=-42
compression=3
#c%=riffoff%+14+pal%:rmask%=
W:gmask%=
W:bmask%=
W:compression=0
rmask%=&FF
rbo%=0:gbo%=1:bbo%=2
gmask%=&FF
gbo%=0:bbo%=1:rbo%=2
bmask%=&FF
bbo%=0:gbo%=1:rbo%=2
input=24
42,".BMP file of unusual depth ("+
input+")"
input<=8
#c%=riffoff%+14+pal%:r$="FN8"
C%=0
2^input-1
:@b%(C%)=
#c%/255*F:g%(C%)=
#c%/255*F:r%(C%)=
#c%/255*F:
compression
0:info$="Uncompressed "
1:info$="RLE8 compressed ":r$="FN2401"
2:info$="RLE4 compressed ":r$="FN2402"
42,".BMP compression type not supported ("+
compression+")"
rowbytes%=rowbytes%+3
compression<>0 cachebytes%=
:plbuff%=
dim(rowbytes%)
cache%=
#c%=riffoff%+st%
FQinfo$+="Windows 3.0 .BMP image, "+
sx%+" by "+
sy%+" pixels, "+
bits(input)
2500
#c%=0:s$="":C%=
C%<>0 s$+=
C%:C%=
I8s$+=" version "+
W:sx%=
W:sy%=
W:input=
W:cache%=
Jainfo$="!Translator Clear format made by "+s$+", "+
sx%+" by "+
sy%+" pixels, "+
bits(input)
input>8
nopal:input=24:step24=3:rowbytes%=3*sx%:rbo%=0:gbo%=1:bbo%=2:r$="FN24"
C%=0
2^input-1
O9r%(C%)=
#c%/255*F:g%(C%)=
#c%/255*F:b%(C%)=
#c%/255*F
Q"input=8:r$="FN8":rowbytes%=sx%
2600
#c%=0:C%=
0:sx%=320:sy%=200:planes%=4
1:sx%=640:sy%=200:planes%=2
2:sx%=640:sy%=400:planes%=1
42,"ChangeFSI knows nothing of "+
C%+" type Degas files"
I%=0
(1<<input)-1:D%=
beHW:r%(I%)=(D%>>8
7)/7*F:g%(I%)=(D%>>4
7)/7*F:b%(I%)=(D%
7)/7*F:
]<cache%=
:planar%=
:masking%=
:st%=34:
#c%=34:r$="FN1600"
^Hrowbytes%=(sx%+15>>4)<<1:plbytes%=rowbytes%*planes%:pbuff%=
dim(sx%)
128 r$="FN1601":flag=1600:cachebytes%=
:plbuff%=
dim(plbytes%)
realrowbytes%=2:rowbytes%=plbytes%
`Einfo$="Degas file "+
sx%+" by "+
sy%+" pixels, "+
bits(planes%)
2700
#c%=4:sx%=
HW:sy%=
&AF:rowbytes%=sx%:cache%=
:r$="FN8":st%=&30A
42,"Panic in ColoRIX reading - ChangeFSI largely ignorant of format!"
C%=0
2^input-1
h6r%(C%)=
#c%/63*F:g%(C%)=
#c%/63*F:b%(C%)=
#c%/63*F
#c%=st%
kEinfo$="ColoRIX file "+
sx%+" by "+
sy%+" pixels, "+
bits(input)
2800
#c%=0:
fits:
s$,8)
"SIMPLE ":
s$,30,1)<>"T"
42,"ChangeFSI can only read Simple FITS format"
"BITPIX ":input=
s$,10)
"NAXIS ":
s$,10)<>2
42,"ChangeFSI can only read 2d FITS images"
"NAXIS1 ":sx%=
s$,10)
"NAXIS2 ":sy%=
s$,10)
"END "
info%
"Ignoring FITS record "s$
s$,8)="END "
w.st%=(
2880 + 1)*2880:cache%=
#c%=st%
input
8:r$="FN8":rowbytes%=sx%:
nopal
16:rowbytes%=2*sx%:
rpal%(255),gpal%(255):step24=2:r$="FN16"
C%=0
gpal%(C%)=C%<<8
rpal%(C%)=C%
:cheat%=0:
invert% cheat%=F
C%=0
255:r%(C%)=cheat%+C%/65535*F:g%(C%)=((C%
&80)<<8)/65535*F:b%(C%)=cheat%:
:rwt=1:gwt=1:bwt=1
42,"ChangeFSI can't read a FITS image with this number of bits per pixel"
Binfo$="FITS file "+
sx%+" by "+
sy%+" pixels, "+
bits(input)
2900
#c%=4:sx%=
beHW:sy%=
beHW:
#c%=&42:input=
beHW:C%=
=rowbytes%=
beHW:C%=
beW:st%=
#c%=st%:r$="FN8":
nopal
rpal%(15),gpal%(15),bpal%(15)
Irpal%()=&e6,&23,&e6,&7f,&17,&00,&a1,&45,&e6,&4a,&e6,&73,&6e,&47,&8a,0
Igpal%()=&e6,&78,&00,&23,&a1,&73,&2e,&2e,&c8,&a6,&75,&40,&b8,&78,&55,0
Ibpal%()=&b8,&e6,&00,&a1,&17,&2e,&0c,&2e,&00,&c6,&00,&e6,&00,&00,&00,0
C%=&80
&8F:r%(C%)=rpal%(C%-&80)/255*F:g%(C%)=gpal%(C%-&80)/255*F:b%(C%)=bpal%(C%-&80)/255*F:
:cache%=
Hinfo$="Apollo GPR file "+
sx%+" by "+
sy%+" pixels, "+
bits(input)
3000
Hsx%=720:sy%=
#c%/1440:
rpal%(255),gpal%(255),bpal%(255),table%(255)
C%=0
table%(C%)=(C%-16)/219*F
>r%(C%)=(C%-128)/186*0.624*F:rpal%(C%)=(C%-128)/160*0.952*F
?g%(C%)=-(C%-128)/186*0.64*F:gpal%(C%)=-(C%-128)/160*0.277*F
=b%(C%)=(C%-128)/186*1.73*F:bpal%(C%)=-(C%-128)/160*1.11*F
C%=0
table%(C%)=(C%-16)/219*F
5r%(C%)=
((C%-128)/160*F):b%(C%)=
((C%-128)/126*F)
Jg%(C%)=
(-(C%-128)/160*rwt/gwt*F):gpal%(C%)=
(-(C%-128)/126*bwt/gwt*F)
<table%()=-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1
:st%=0:
#c%=0:cache%=
:rowbytes%=1440:input=422:gamma=1
scale% ymul%=ymul%*2
<info$="CCIR601 4:2:2 file "+
sx%+" by "+
sy%+" pixels"
3100
$quant%=8:
#c%=0:a$=
#c%:st%=
!sx%=
a$:sy%=
a$," ")))
nopal:input=24:step24=3:rowbytes%=sx%*3
4rbo%=0:gbo%=1:bbo%=2:cache%=
:flag=700:r$="FN24"
Sinfo$="!RayShade 'RGB' image, "+
sx%+" by "+
sy%+" pixels, 24 bits per pixel"
3200
quant%=8:
#c%=0:st%=0
s$,"_")+1,1)
sx%
5:sx%=768:sy%=512
2:sx%=3072:sy%=2048
1:sx%=1536:sy%=1024
nopal:input=24:step24=3:rowbytes%=sx%*3
4rbo%=0:gbo%=1:bbo%=2:cache%=
:flag=700:r$="FN24"
Ninfo$="Kodak /RGB image, "+
sx%+" by "+
sy%+" pixels, 24 bits per pixel"
3300
#c%=0:input=
GET,2)
GET:sx%=
s$:sy%=
s$," ")):
sy%=0 sy%=
cache%=
input
4:input=1:r$="FN8":r%(0)=F:g%()=r%():b%()=r%():bigendianbits=
rowbytes%=(sx%+7)
5:input=8:r$="FN8":E%=
C%=0
E%:r%(C%)=C%/E%*F:
:g%()=r%():b%()=r%()
rowbytes%=sx%
6:input=24:r$="FN24":E%=
GET:step24=3:rbo%=0:gbo%=1:bbo%=2
C%=0
E%:r%(C%)=C%/E%*F:
:g%()=r%():b%()=r%()
rowbytes%=sx%*3
#c%:flag=700
Dinfo$+="pbm image, "+
sx%+" by "+
sy%+" pixels, "+
bits(input)
s$,1)<>"#":=s$
3400
#c%=0:s$=
GET:input=16:quant%=5
GET:sx%=
s$:sy%=
s$," ")):s$=
rpal%(255),gpal%(255):input=16:step24=2
C%=0
"gpal%(C%)=(C%>>5)<<8
+rpal%(C%)=((C%>>2)
31)<<16
3)<<11
cache%=
:r$="FN16"
C%=0
31:r%(C%)=C%/31*F:
:g%()=r%():b%()=r%()
%rowbytes%=sx%*2:st%=
#c%:flag=700
Cinfo$="p15 image, "+
sx%+" by "+
sy%+" pixels, "+
bits(input)
3450
#c%=0:info$=
4ybits%=
info$,
info$," ")):ymax%=(1<<ybits%)-1
;ubits%=
info$,
info$,"Y ")+1):umax%=(1<<(ubits%-1))-1
;vbits%=
info$,
info$,"U ")+1):vmax%=(1<<(vbits%-1))-1
GET:sx%=
s$:sy%=
s$," "))
rpal%(255),gpal%(255),bpal%(255),table%(255)
C%=0
ymax%:table%(C%)=C%/ymax%*F:
D%=(1<<ubits%)-1
C%=0
D%:d=C%/umax%:
d>1 d=-(D%-C%)/umax%
;b%(C%)=
(d*(1-bwt)*F):gpal%(C%)=
(-d*(1-bwt)*bwt/gwt*F)
D%=(1<<vbits%)-1
C%=0
D%:d=C%/vmax%:
d>1 d=-(D%-C%)/vmax%
8r%(C%)=
(d*(1-rwt)*F):g%(C%)=
(-d*(1-rwt)*rwt/gwt*F)
;rowbytes%=sx%*2:st%=
#c%:cache%=
:r$="FN2250":input=555
,info$+=", "+
sx%+" by "+
sy%+" pixels"
3500
Aquant%=1:
#c%=6:E%=
HW:sx%=
HW:sx%=
HW:sy%=
HW:st%=
HW:st%=
4rowbytes%=sx%/8+1
1:cache%=
:st%+=
#c%=st%
,r$="FN8":input=1:r%(0)=F:g%(0)=F:b%(0)=F
Minfo$="Pocketbook bitmap, "+
sx%+" by "+
sy%+" pixels, 1 bit per pixel"
9planar%=
:planes%=2:r$="FN1600":input=8:cachebytes%=
?r%(0)=F:r%(1)=(F/3)*2:r%(2)=F/3:r%(3)=0:g%()=r%():b%()=r%()
Hplbytes%=rowbytes%*planes%:buff%=
dim(plbytes%*sy%):pbuff%=
dim(sx%)
realrowbytes%=rowbytes%*sy%
Pinfo$="PocketbookII bitmap, "+
sx%+" by "+
sy%+" pixels, 2 bits per pixel"
42,"Unknown Pocketbook PIC format"
3600
Bpcdblk%=
dim(40):
&20023,"ChangeFSI$PCDindex",pcdblk%,20
pcdblk%?Z=13:pcdindex%=
$pcdblk%
pcdindex%=3
"PhotoCD_Open",1,c%,1
pcdh%:
"PhotoCD_GetCount",pcdh%
(Z>>pcdindex%)=0
42,"Desired resolution unavailable"
"PhotoCD_GetRotation",pcdh%
,,pcdtr%
"PhotoCD_GetSize",pcdh%,,pcdindex%
,,,,sx%,sy%
)pcdblk%!0=0:pcdblk%!8=sx%:pcdblk%!4=0
7pcdblk%!16=0:pcdblk%!20=2:pcdblk%!24=1:pcdblk%!28=3
pcdtr%
&80000000:hflip%=
hflip%
rotate%
0:rotate%=1
-1:rotate%=0
1:rotate%=0:vflip%=
vflip%:hflip%=
hflip%
&8000005A
rotate%
0:rotate%=1:vflip%=
vflip%
-1:rotate%=0:vflip%=
vflip%
1:rotate%=0:hflip%=
hflip%
180:hflip%=
hflip%:vflip%=
vflip%
&800000B4:vflip%=
vflip%
rotate%
0:rotate%=-1
1:rotate%=0
-1:rotate%=0:vflip%=
vflip%:hflip%=
hflip%
&8000010E
rotate%
0:rotate%=-1:vflip%=
vflip%
1:rotate%=0:vflip%=
vflip%
-1:rotate%=0:hflip%=
hflip%
PANIC
@input=24:step24=3:rbo%=0:gbo%=1:bbo%=2:pcdcachesize%=32*1024
Arowbytes%=sx%*3:
nopal:cache%=
:pcdcache%=
dim(pcdcachesize%)
Kinfo$="PhotoCD image, "+
sx%+" by "+
sy%+" pixels, 24 bits per pixel"
3700
"<ChangeFSI$Dir>.CFSIjpeg":jpeg%=
12,4,A%,jpeg%,
Ddatacache%=
cachedim(
#c%):
datacache%=-1 datacache%=
#c%=0:
12,4,c%,datacache%,
RA%=datacache%:B%=jpegblk%:C%=jpegblk%+4:D%=jpegblk%+8:E%=jpegblk%+12:
jpeg%+8
&B%=jpegblk%!12:jpegspace%=
dim(B%)
!'C%=datacache%:A%=jpegspace%:D%=
jpeg%:cache%=
42,"JPEG code error: "+
#5sx%=A%!20:sy%=A%!24:input=8*A%?28:
nopal:step24=4
$Dinfo$="JFIF image, "+
sx%+" by "+
sy%+" pixels, "+
bits(input)
%&jpegy%=sy%:r$="FN"+
(3700+input)
3800
#c%=24:sx%=
W:sy%=
scale% ymul%=ymul%*2
rpal%(255),gpal%(255),bpal%(255),table%(255)
C%=0
C%<128 table%(C%)=C%/127*F
D%=C%:
128 D%-=256
-)r%(C%)=
(D%/160*F):b%(C%)=
(D%/126*F)
.>g%(C%)=
(-D%/160*rwt/gwt*F):gpal%(C%)=
(-D%/126*bwt/gwt*F)
#c%=52:st%=
#c%=64:cache%=
:rowbytes%=2*sx%:input=411
1Hinfo$="Uncompressed Techno-I YUV file "+
sx%+" by "+
sy%+" pixels"
3900
#c%=8:sx%=
W:sy%=
W:st%=16:quant%=12:step24=6
C%=0
4095:r%(C%)=C%/4095*F:
:g%()=r%():b%()=r%()
5Dinput=48:rowbytes%=sx%*6:cache%=
:r$="FN24":rbo%=0:gbo%=2:bbo%=4
6Rinfo$="Ronald Alpiar format, "+
sx%+" by "+
sy%+" pixels, 36 bits per pixel"
3905
#c%=8:sx%=
W:sy%=
W:st%=16:quant%=16:step24=6
C%=0
65535:r%(C%)=C%/65535*F:
:g%()=r%():b%()=r%()
:Dinput=48:rowbytes%=sx%*6:cache%=
:r$="FN24":rbo%=0:gbo%=2:bbo%=4
;Rinfo$="Ronald Alpiar format, "+
sx%+" by "+
sy%+" pixels, 48 bits per pixel"
=?st%=0:
#c%=0:sx%=160:sy%=128:input=8:cache%=
:rowbytes%=sx%
C%=0
255:r%(C%)=C%/255*F:
:g%()=r%():b%()=r%():r$="FN8"
?Ninfo$="The number of the beast, 160 by "+
sy%+" pixels, 8 bits per pixel"
info%
info$
("set ChangeFSI$X "+
sx%):
("set ChangeFSI$Y "+
sy%)
hourg%=
"Hourglass_On"
"Hourglass_Off"
hour%=&406c4
m=-9
m=-10
"XOS_CLI","rmensure CompressJPEG 0 rmload System:Modules.jcompmod"
"XOS_CLI","rmensure CompressJPEG 0 IF ""<ChangeFSI$Dir>"" <> """" THEN rmload <ChangeFSI$Dir>.jcompmod"
HB*rmensure CompressJPEG 0 ERROR Can't find CompressJPEG module.
invert% r%()=F-r%():g%()=F-g%():b%()=F-b%()
xdiv%
reduce(xmul%,xdiv%)
ydiv%
reduce(ymul%,ydiv%)
-1:x%=256:y%=256:ncol=256:
scaleo% xdiv%=xdiv%*2:ydiv%=ydiv%*2
-2:x%=sx%:y%=sy%:
spm=18 ncol=1
ncol=15
-3,-5,-6:x%=sx%:y%=sy%:ncol=2^15-1
-4,-7,-8:x%=sx%:y%=sy%:ncol=2^24-1
-9,-10:x%=sx%:y%=sy%:ncol=2^24-1:
m=-9 ncol=256
53,m,4
,,nx:
53,m,5
,,ny:nx=1<<nx:ny=1<<ny
53,m,11
,,x%:
53,m,12
,,y%:x%+=1:y%+=1
53,m,3
,,ncol:
scaleo%
rotate%
X!xdiv%=xdiv%*ny:ydiv%=ydiv%*nx
xdiv% ymul%=ymul%*2
ydiv% xmul%=xmul%*2
\!xdiv%=xdiv%*nx:ydiv%=ydiv%*ny
xdiv% xmul%=xmul%*2
ydiv% ymul%=ymul%*2
&62A51,m
r0;V:
1)=0
r0=1
ncol=255:
m$<>"D" m$="R"
m=-6
m=-7
m=-8
h,nx=
pnm$,5):ny=
pnm$,
pnm$,",",5)+1)
scaleo%
rotate%
xdiv% ymul%=ymul%*nx
ydiv% xmul%=xmul%*ny
xdiv% xmul%=xmul%*nx
ydiv% ymul%=ymul%*ny
q!xdiv%=xdiv%*90:ydiv%=ydiv%*90
rotate%
x%,y%
xdiv%=0 xdiv%=sx%
ydiv%=0 ydiv%=sy%
xs$="=" xmul%=x%:xdiv%=sx%
ys$="=" ymul%=y%:ydiv%=sy%
lock%
xmul%/xdiv%>ymul%/ydiv% xmul%=ymul%:xdiv%=ydiv%
ymul%=xmul%:ydiv%=xdiv%
ncol=1
"C":xdiv%=xdiv%*4:ydiv%=ydiv%*4
A%(16),B%(16)
A%()=0,&00000001,&08000001,&08000101,&08080101,&08080103,&0C080103,&0C080303,&0C0C0303,&0C0E0303,&0C0E0703,&0E0E0703,&0E0E0707,&0E0F0707,&0E0F0F07,&0F0F0F07,&0F0F0F0F
B%()=0,&00000008,&01000008,&01000808,&01010808,&0101080C,&0301080C,&03010C0C,&03030C0C,&03070C0C,&03070E0C,&07070E0C,&07070E0E,&070F0E0E,&070F0F0E,&0F0F0F0E,&0F0F0F0F
2even_gard=
dim(17*32*4):odd_gard=
dim(17*32*4)
I%=0
J%=0
16:even_gard!(J%*32*4+I%*4)=A%(I%)
B%(J%)<<4:
I%=0
J%=0
16:odd_gard!(I%*32*4+J%*4)=B%(I%)
A%(J%)<<4:
"T":xdiv%=xdiv%*3:ydiv%=ydiv%*3
A%(9),B%(9)
@A%()=0,&0001,&4001,&4041,&4043,&40C3,&60C3,&61C3,&71C3,&71C7
@B%()=0,&0004,&1004,&1104,&1106,&1186,&3186,&31C6,&71C6,&71C7
2even_gard=
dim(10*16*4):odd_gard=
dim(10*16*4)
I%=0
J%=0
9:even_gard!(J%*16*4+I%*4)=A%(I%)
B%(J%)<<3:
I%=0
J%=0
9:odd_gard!(I%*16*4+J%*4)=B%(I%)
A%(J%)<<3:
"D":xdiv%=xdiv%*2:ydiv%=ydiv%*2
A%(4),B%(4)
A%()=0,&1,&21,&31,&33
B%()=0,&2,&12,&32,&33
*even_gard=
dim(5*8):odd_gard=
dim(5*8)
I%=0
J%=0
4:even_gard?(J%*8+I%)=A%(I%)
B%(J%)<<2:
I%=0
J%=0
4:odd_gard?(I%*8+J%)=B%(I%)
A%(J%)<<2:
reduce(xmul%,xdiv%):
reduce(ymul%,ydiv%)
xdiv%*ydiv%*255>2^32 xdiv%=xdiv%
1:ydiv%=ydiv%
1:xmul%=xmul%
1:ymul%=ymul%
xdiv%*ydiv%*255<2^32
info%
"Size ratios are x ";xmul%":"xdiv%" y "ymul%":"ydiv%
9x%=sx%*xmul%/xdiv%+.1:y%=sy%*ymul%/ydiv%+.1:rows%=sy%
order%=x%*y%>sx%*sy%
code%=
dim(8192):SP=13
cache%
cachesize(code%)
cachebytes%
;filesize%=
cache%>filesize% cache%=filesize%
cachebytes%>0
cache%>cachebytes% cache%=cachebytes%
cacherows%=cache%
?filesize%=sy%*rowbytes%:
cache%<rowbytes% cache%=rowbytes%
cache%>filesize% cache%=filesize%
Ecacherows%=striprows%:
cacherows%<1 cacherows%=cache%
rowbytes%
cache%=cacherows%*rowbytes%
Hdatacache%=
cachedim(cache%):
datacache%=-1 datacache%=
dim(cache%)
ncol=255
m$<>"D" m$="R"
m$="R"
(ncol=63
m$="")
53,-1,3
,,J%:
ncol=255
=m J%=ncol
ncol=63
(m$=""
m$="R") J%=ncol
J%<>ncol
close:
42,"You must be in a "+
(ncol+1)+" colour mode to do this"
J%=ncol:
J%=63 J%=255
palette%=
dim((J%+1)*4)
ncol=255
"ColourTrans_ReadPalette",-1,-1,palette%,256*4
I%=0
255:palette%!(I%<<2)=palette%!(I%<<2)>>>8:
ncol=63
I%=0
+palette%!(I%<<2)=(I%
16)>>1)*17
/palette%?(I%<<2
1)=(I%
&60)>>3)*17
;palette%?(I%<<2
2)=(I%
8)>>1
128)>>4)*17
I%=0
ncol:
"OS_ReadPalette",I%,16
,,i%:palette%!(I%<<2)=i%>>>8:
:k%=palette%+1:nk%=palette%+2
I%=0
ncol*4
palette%?I%<>k%?I%
palette%?I%<>nk%?I% t%=
ncol>16
t% m$="D"
ncol=15
t% m$="T"
m$="R"
sx%*xmul%/xdiv%*sy%*ymul%/ydiv%<200000 k%=3
k%=4
nk%=8-k%
t%=1<<nk%
mask%=t%-1
td2%=1<<nk%-1
step%=1<<(8-k%)
%ncol%=ncol+1:
ncol%=64 ncol%=256
ict%=
dim(2^(k%*3)*4-1)
cache%<8192*6 scratch%=
dim(8192*6):scratchsz%=8192*6
scratch%=datacache%:scratchsz%=cache%
info%
"Begin table generation with ";scratchsz%" bytes."
Z%=0
P%=code%
[OPT Z%
.make%
STMFD r13!,{r14}
LDR r4,ict
MOV r2,#step%/2
.blueloop
MOV r1,#step%/2
.greenloop
MOV r0,#step%/2
.redloop
MOV r3,r0,LSR #nk%
MOV r14,r1,LSR #nk%
MOV r5,r2,LSR #nk%
R r3,r3,r14,LSL #k%
R r3,r3,r5,LSL #k%*2
BL devious
ADD r0,r0,#step%*2
CMP r0,#256
BCC redloop
ADD r1,r1,#step%
CMP r1,#256
BCC greenloop
ADD r2,r2,#step%
CMP r2,#256
BCC blueloop
LDMFD r13!,{pc}^
.ct DCD palette%
.min DCD code%+8192-256*2*4
.ict DCD ict%
.fsaad DCD scratch%
#.fsalim DCD scratch%+scratchsz%
.devious
&STMFD r13!,{r0,r1,r2,r3,r4,r8,r14}
BIC r0,r0,#(mask%<<1)+1
BIC r1,r1,#mask%
BIC r2,r2,#mask%
MOV r5,#0
LDR r6,ct
MOV r9,#&ff0000
MOV r14,#&ff0000
LDR r12,min
.devloop
LDR r7,[r6,r5,LSL #2]
MOV r8,r7,lsr #16
BIC r10,r8,#mask%
ADD r11,r2,#t%
CMP r10,r2
BEQ blueequal
SUBCC r10,r2,r8
SUBCC r11,r11,r8
SUBCS r10,r8,r11
SUBCS r11,r8,r2
MUL r3,r10,r10
.doneblue
MUL r4,r11,r11
MOV r8,r7,lsr #8
r8,r8,#255
BIC r10,r8,#mask%
ADD r11,r1,#t%
CMP r10,r1
BEQ greenequal
SUBCC r10,r1,r8
SUBCC r11,r11,r8
SUBCS r10,r8,r11
SUBCS r11,r8,r1
MUL r8,r10,r10
ADD r8,r8,r8,LSL #2
ADD r3,r3,r8,LSL #1
.donegreen
MUL r8,r11,r11
ADD r8,r8,r8,LSL #2
ADD r4,r4,r8,LSL #1
r8,r7,#255
BIC r10,r8,#mask%
ADD r11,r0,#t%
CMP r10,r0
BEQ redequal0
SUBCC r10,r0,r8
SUBCC r11,r11,r8
SUBCS r10,r8,r11
SUBCS r11,r8,r0
MUL r7,r10,r10
ADD r7,r7,r7,LSL #1
ADD r7,r3,r7
STR r7,[r12,r5,LSL #2]
.donered0
MUL r7,r11,r11
ADD r7,r7,r7,LSL #1
ADD r7,r4,r7
CMP r7,r9
MOVCC r9,r7
ADD r7,r0,#t%
BIC r10,r8,#mask%
ADD r11,r7,#t%
CMP r10,r7
BEQ redequal1
SUBCC r10,r7,r8
SUBCC r11,r11,r8
SUBCS r10,r8,r11
SUBCS r11,r8,r7
MUL r7,r10,r10
ADD r7,r7,r7,LSL #1
ADD r3,r3,r7
.donered1
ADD r7,r5,#ncol%
STR r3,[r12,r7,LSL #2]
MUL r7,r11,r11
ADD r7,r7,r7,LSL #1
ADD r7,r4,r7
CMP r7,r14
MOVCC r14,r7
ADD r5,r5,#1
CMP r5,#ncol%
BCC devloop
LDMFD r13!,{r0,r1,r2,r3,r4}
LDR r5,fsaad
MOV r7,r5
MOV r10,#0
.calcnum0
LDMIA r12!,{r8,r11}
CMP r8,r9
STRLEB r10,[r7],#1
ADD r10,r10,#1
CMP r11,r9
STRLEB r10,[r7],#1
ADD r10,r10,#1
LDMIA r12!,{r8,r11}
CMP r8,r9
STRLEB r10,[r7],#1
ADD r10,r10,#1
CMP r11,r9
STRLEB r10,[r7],#1
ADD r10,r10,#1
CMP r10,#ncol%
BCC calcnum0
SUBS r10,r7,r5
SWIEQ 256+
CMP r10,#4 ;if<4 then
]#MOVCC r7,r5 ;reset list pointer
^"LDRCCB r5,[r7] ;first possible
_&LDRCCB r8,[r7,#1] ;second possible
RCC r5,r5,r8,lsl #8
a%LDRCCB r8,[r7,#2] ;third possible
RCC r5,r5,r8,lsl #16
ADD r5,r5,r10,lsl #24
BIC r10,r3,#1
STR r5,[r4,r10,LSL #2]
MOV r5,r7
MOV r10,#0
.calcnum1
LDMIA r12!,{r8,r11}
CMP r8,r14
STRLEB r10,[r7],#1
ADD r10,r10,#1
CMP r11,r14
STRLEB r10,[r7],#1
ADD r10,r10,#1
LDMIA r12!,{r8,r11}
CMP r8,r14
STRLEB r10,[r7],#1
ADD r10,r10,#1
CMP r11,r14
STRLEB r10,[r7],#1
ADD r10,r10,#1
CMP r10,#ncol%
BCC calcnum1
SUBS r10,r7,r5
SWIEQ 256+
CMP r10,#4 ;if<4 then
MOVCC r7,r5
LDRCCB r5,[r7]
LDRCCB r8,[r7,#1]
RCC r5,r5,r8,lsl #8
LDRCCB r8,[r7,#2]
RCC r5,r5,r8,lsl #16
ADD r5,r5,r10,lsl #24
R r10,r3,#1
STR r5,[r4,r10,LSL #2]
STR r7,fsaad
LDR r8,fsalim
CMP r7,r8
SWICS 256+
LDMFD r13!,{r8,pc}^
.redequal0
STR r3,[r12,r5,LSL #2]
TST r8,#td2%
SUBNE r11,r8,r0
SUBEQ r11,r11,r8
B donered0
.redequal1
TST r8,#td2%
SUBNE r11,r8,r7
SUBEQ r11,r11,r8
B donered1
.greenequal
TST r8,#td2%
SUBNE r11,r8,r1
SUBEQ r11,r11,r8
B donegreen
.blueequal
MOV r3,#0
TST r8,#td2%
SUBNE r11,r8,r2
SUBEQ r11,r11,r8
B doneblue
make%
info%
"Generated 'r'";k%" tables for ";ncol%" colours using ";!fsaad-scratch%" bytes, taking "
-I%" cS"
%safesubict%=
dim(!fsaad-scratch%)
I%=0
!fsaad-scratch%+4
4:safesubict%!I%=scratch%!I%:
I%=0
2^(k%*3)*4-1
(ict%!I%>>>24)>3 ict%!I%=ict%!I%-scratch%+safesubict%
fast%
-1,-9:col=0
-3,-4,-5,-6,-7,-8,-10:col=2
m$="D"
ncol=3 m$=""
1col=0:
ncol>15
m$="C"
m$="D"
m$="R" col=2
ncol=63
ncol=255
m$="D" col=0:ncol=256
ncol=1
"C":col=0:x%=x%+1
"D":col=0:x%=x%+3
"T":col=0:x%=x%+1
cl%(x%+7,col)
xl%(x%+7,col),xp%(sx%+7,col)
xl2%(x%+7,col)
sharpen%
order%
rm%(sx%+7,col),rm1%(sx%+7,col),rm2%(sx%+7,col)
rm%(x%+7,col),rm1%(x%+7,col),rm2%(x%+7,col)
hist%
equal%
vals%(256,col)
nl%(x%+7,col)
totvals%=x%*(col+1)
totvals2%=sx%*(col+1)
2:P%=code%
ncol
2^24-1
[OPT Z
.div255
I%=0
2^p6bits-1
[OPT Z
EQUD I%/(2^p6bits-1)*F
[OPT Z
STMFD SP !,{R14}
LDR R1,[R9,#5*8]:LDR R1,[R1]
LDR R10,[R9,#4*8]
LDR R11,[R9,#3*8]
#LDR R12,[R9,#2*8]:LDR R12,[R12]
LDR R8,[R9,#8]:LDR R8,[R8]
LDR R9,[R9]:LDR R9,[R9]
LDR R4,[R10]
LDR R5,[R10,#4]
LDR R6,[R10,#8]
ADR R7,div255
.fsloop
ADD R10,R10,R8
%CMP R4,#F:MOVCS R4,#0:MOVGE R4,#F
WSUB R0,R4,R4,LSR #p6bits:ADD R0,R0,#1<<(bits-p6bits-1):MOV R0,R0,LSR #(bits-p6bits)
&LDR R2,[R7,R0,LSL #2]:SUB R4,R4,R2
%CMP R5,#F:MOVCS R5,#0:MOVGE R5,#F
jSUB R3,R5,R5,LSR #p6bits:ADD R3,R3,#1<<(bits-p6bits-1):MOV R3,R3,LSR #(bits-p6bits):
R R0,R0,R3,LSL #8
&LDR R2,[R7,R3,LSL #2]:SUB R5,R5,R2
%CMP R6,#F:MOVCS R6,#0:MOVGE R6,#F
kSUB R3,R6,R6,LSR #p6bits:ADD R3,R3,#1<<(bits-p6bits-1):MOV R3,R3,LSR #(bits-p6bits):
R R0,R0,R3,LSL #16
&LDR R2,[R7,R3,LSL #2]:SUB R6,R6,R2
DSTRB R0,[R12]:MOV R0,R0,LSR #8:STRB R0,[R12,#1]:MOV R0,R0,LSR #8
STRB R0,[R12,#2]
m=-8
[OPT Z
ADD R12,R12,R1,LSL #2
[OPT Z
(ADD R12,R12,R1,LSL #1:ADD R12,R12,R1
dither%
[OPT Z
ADD R0,R11,#4
ADD R2,R4,R4,LSL #1
(LDR R3,[R11,-R8]:ADD R3,R3,R2,ASR #4
STR R3,[R11,-R8]
ADD R2,R4,R4,LSL #2
$LDR R3,[R11]:ADD R3,R3,R2,ASR #4
STR R3,[R11]
MOV R3,R4,ASR #4
STR R3,[R11,R8]!
RSB R2,R4,R4,LSL #3
LDR R4,[R10]
ADD R4,R4,R2,ASR #4
ADD R2,R5,R5,LSL #1
'LDR R3,[R0,-R8]:ADD R3,R3,R2,ASR #4
STR R3,[R0,-R8]
MOV R3,R5,ASR #4
STR R3,[R0,R8]
ADD R2,R5,R5,LSL #2
#LDR R3,[R0]:ADD R3,R3,R2,ASR #4
STR R3,[R0],#4
RSB R2,R5,R5,LSL #3
LDR R5,[R10,#4]
ADD R5,R5,R2,ASR #4
ADD R2,R6,R6,LSL #1
'LDR R3,[R0,-R8]:ADD R3,R3,R2,ASR #4
STR R3,[R0,-R8]
ADD R2,R6,R6,LSL #2
#LDR R3,[R0]:ADD R3,R3,R2,ASR #4
STR R3,[R0]
MOV R3,R6,ASR #4
STR R3,[R0,R8]
RSB R2,R6,R6,LSL #3
LDR R6,[R10,#8]
ADD R6,R6,R2,ASR #4
[OPT Z
LDMIA R10,{R4,R5,R6}
[OPT Z
SUBS R9,R9,#1:BNE fsloop
LDMFD SP !,{PC}^
2^15-1
[OPT Z
.div31
I%=0
[OPT Z
EQUD I%/31*F
[OPT Z
STMFD SP !,{R14}
1 LDR R1,[R9,#5*8]:LDR R1,[R1]
LDR R10,[R9,#4*8]
LDR R11,[R9,#3*8]
4#LDR R12,[R9,#2*8]:LDR R12,[R12]
LDR R8,[R9,#8]:LDR R8,[R8]
LDR R9,[R9]:LDR R9,[R9]
LDR R4,[R10]
LDR R5,[R10,#4]
LDR R6,[R10,#8]
ADR R7,div31
.fsloop
ADD R10,R10,R8
=%CMP R4,#F:MOVCS R4,#0:MOVGE R4,#F
>FSUB R0,R4,R4,LSR #5:ADD R0,R0,#1<<(bits-6):MOV R0,R0,LSR #(bits-5)
?&LDR R2,[R7,R0,LSL #2]:SUB R4,R4,R2
@%CMP R5,#F:MOVCS R5,#0:MOVGE R5,#F
AYSUB R3,R5,R5,LSR #5:ADD R3,R3,#1<<(bits-6):MOV R3,R3,LSR #(bits-5):
R R0,R0,R3,LSL #5
B&LDR R2,[R7,R3,LSL #2]:SUB R5,R5,R2
C%CMP R6,#F:MOVCS R6,#0:MOVGE R6,#F
DZSUB R3,R6,R6,LSR #5:ADD R3,R3,#1<<(bits-6):MOV R3,R3,LSR #(bits-5):
R R0,R0,R3,LSL #10
E&LDR R2,[R7,R3,LSL #2]:SUB R6,R6,R2
FISTRB R0,[R12]:MOV R0,R0,LSR #8:STRB R0,[R12,#1]:ADD R12,R12,R1,LSL #1
dither%
[OPT Z
ADD R0,R11,#4
ADD R2,R4,R4,LSL #1
L(LDR R3,[R11,-R8]:ADD R3,R3,R2,ASR #4
STR R3,[R11,-R8]
ADD R2,R4,R4,LSL #2
O$LDR R3,[R11]:ADD R3,R3,R2,ASR #4
STR R3,[R11]
MOV R3,R4,ASR #4
STR R3,[R11,R8]!
RSB R2,R4,R4,LSL #3
LDR R4,[R10]
ADD R4,R4,R2,ASR #4
ADD R2,R5,R5,LSL #1
W'LDR R3,[R0,-R8]:ADD R3,R3,R2,ASR #4
STR R3,[R0,-R8]
MOV R3,R5,ASR #4
STR R3,[R0,R8]
ADD R2,R5,R5,LSL #2
\#LDR R3,[R0]:ADD R3,R3,R2,ASR #4
STR R3,[R0],#4
RSB R2,R5,R5,LSL #3
LDR R5,[R10,#4]
ADD R5,R5,R2,ASR #4
ADD R2,R6,R6,LSL #1
b'LDR R3,[R0,-R8]:ADD R3,R3,R2,ASR #4
STR R3,[R0,-R8]
ADD R2,R6,R6,LSL #2
e#LDR R3,[R0]:ADD R3,R3,R2,ASR #4
STR R3,[R0]
MOV R3,R6,ASR #4
STR R3,[R0,R8]
RSB R2,R6,R6,LSL #3
LDR R6,[R10,#8]
ADD R6,R6,R2,ASR #4
[OPT Z
LDMIA R10,{R4,R5,R6}
[OPT Z
SUBS R9,R9,#1:BNE fsloop
LDMFD SP !,{PC}^
[OPT Z
.div255
I%=0
[OPT Z
EQUD I%/255*F
[OPT Z
STMFD SP !,{R14}
LDR R10,[R9,#4*8]
ADR R7,div255
LDR R1,[R9,#5*8]:LDR R1,[R1]
LDR R11,[R9,#3*8]
#LDR R12,[R9,#2*8]:LDR R12,[R12]
LDR R8,[R9,#8]:LDR R8,[R8]
LDR R9,[R9]:LDR R9,[R9]
LDR R4,[R10],R8
.fsloop
%CMP R4,#F:MOVCS R4,#0:MOVGE R4,#F
WSUB R0,R4,R4,LSR #8:ADD R0,R0,#1<<(bits-9):MOV R0,R0,LSR #(bits-8):STRB R0,[R12],R1
LDR R2,[R7,R0,LSL #2]
dither%
[OPT Z
SUB R4,R4,R2
MOVCS R4,#0
ADD R2,R4,R4,LSL #1
(LDR R3,[R11,-R8]:ADD R3,R3,R2,ASR #4
STR R3,[R11,-R8]
ADD R2,R4,R4,LSL #2
$LDR R3,[R11]:ADD R3,R3,R2,ASR #4
STR R3,[R11]
MOV R3,R4,ASR #4
STR R3,[R11,R8]!
RSB R2,R4,R4,LSL #3
LDR R4,[R10],R8
ADD R4,R4,R2,ASR #4
[OPT Z
LDR R4,[R10],R8
[OPT Z
SUBS R9,R9,#1:BNE fsloop
LDMFD SP !,{PC}^
63,255
div15=P%:
I%=0
255*4
[OPT Z
EQUD (palette%!I%
&FF)/255*F
#EQUD (palette%!I%>>8
&FF)/255*F
$EQUD (palette%!I%>>16
&FF)/255*F
m$="R"
[OPT Z
.ictloc EQUD ict%
[OPT Z
EQUD div15
STMFD SP !,{R14}
LDR R1,[R9,#5*8]:LDR R1,[R1]
LDR R10,[R9,#4*8]
LDR R11,[R9,#3*8]
#LDR R12,[R9,#2*8]:LDR R12,[R12]
LDR R8,[R9,#8]:LDR R8,[R8]
LDR R9,[R9]:LDR R9,[R9]
LDR R4,[R10]
LDR R5,[R10,#4]
LDR R6,[R10,#8]
LDR R7,fs%-4
.fsloop
ADD R10,R10,R8
[OPT Z
%CMP R4,#F:MOVCS R4,#0:MOVGE R4,#F
3MOV R0,R4,LSR #(bits-4):CMP R0,#15:MOVCS R0,#15
%CMP R5,#F:MOVCS R5,#0:MOVGE R5,#F
FMOV R3,R5,LSR #(bits-4):CMP R3,#15:MOVCS R3,#15:
R R0,R0,R3,LSL #4
%CMP R6,#F:MOVCS R6,#0:MOVGE R6,#F
FMOV R3,R6,LSR #(bits-4):CMP R3,#15:MOVCS R3,#15:
R R0,R0,R3,LSL #8
LDR R3,colmatchloc
LDRB R0,[R3,R0]
+ADD R3,R0,R0,LSL #1:ADD R3,R7,R3,LSL #2
LDR R2,[R3],#4:SUB R4,R4,R2
.LDMIA R3,{R2,R3}:SUB R5,R5,R2:SUB R6,R6,R3
srchdevlist
[OPT Z
%CMP R4,#F:MOVCS R4,#0:MOVGE R4,#F
%CMP R5,#F:MOVCS R5,#0:MOVGE R5,#F
%CMP R6,#F:MOVCS R6,#0:MOVGE R6,#F
STMFD SP !,{R7,R8,R9}
MVN R2,#0
MOV R3,#&30<<23
.srch RSB R7,R3,#&20<<23
MOV R8,R6,LSR #bits-8
SUB R8,R8,R8,LSR #4
ADDS R7,R7,R8,LSL #23
MOVVSS R7,#&7F000000
MOVMI R7,#0
R7,R7,#&60000000
ADD R7,R7,R3
ADD R14,R7,R7,LSR #4
ADD R7,R14,R14,LSR #8
ADD R7,R7,R7,LSR #16
SUBS R8,R6,R7,LSR #31-bits
RSBLT R8,R8,#0
MOV R8,R8,LSR #bits/2
MUL R9,R8,R8
RSB R7,R3,#&20<<23
MOV R8,R5,LSR #bits-8
SUB R8,R8,R8,LSR #4
ADDS R7,R7,R8,LSL #23
MOVVSS R7,#&7F000000
MOVMI R7,#0
R7,R7,#&60000000
ADD R7,R3,R7
ADD R7,R7,R7,LSR #4
R R14,R14,R7,LSR #8
ADD R7,R7,R7,LSR #8
ADD R7,R7,R7,LSR #16
SUBS R8,R5,R7,LSR #31-bits
RSBLT R8,R8,#0
MOV R8,R8,LSR #bits/2
MUL R7,R8,R8
ADD R7,R7,R7,LSL #2
ADD R9,R9,R7,LSL #1
RSB R7,R3,#&20<<23
MOV R8,R4,LSR #bits-8
SUB R8,R8,R8,LSR #4
ADDS R7,R7,R8,LSL #23
MOVVSS R7,#&7F000000
MOVMI R7,#0
R7,R7,#&60000000
ADD R7,R3,R7
ADD R7,R7,R7,LSR #4
R R14,R14,R7,LSR #16
ADD R7,R7,R7,LSR #8
ADD R7,R7,R7,LSR #16
SUBS R8,R4,R7,LSR #31-bits
RSBLT R8,R8,#0
MOV R8,R8,LSR #bits/2
MUL R7,R8,R8
ADD R7,R7,R7,LSL #1
ADD R9,R9,R7
CMP R9,R2
MOVLS R2,R9
MOVLS R0,R14
SUBS R3,R3,#&10<<23
BGE srch
R7,R0,#&40000000
MOV R8,R7,LSR #23
R7,R0,#&600000
R R8,R8,R7,LSR #16
R7,R0,#&4000
R R8,R8,R7,LSR #10
R7,R0,#&20000000
R R8,R8,R7,LSR #26
R7,R0,#&3800
R R0,R8,R7,LSR #11
LDMFD SP !,{R7,R8,R9}
"+ADD R3,R0,R0,LSL #1:ADD R3,R7,R3,LSL #2
LDR R2,[R3],#4:SUB R4,R4,R2
$.LDMIA R3,{R2,R3}:SUB R5,R5,R2:SUB R6,R6,R3
[OPT Z
STRB R0,[R12],R1
dither%
[OPT Z
ADD R0,R11,#4
ADD R2,R4,R4,LSL #1
.(LDR R3,[R11,-R8]:ADD R3,R3,R2,ASR #4
STR R3,[R11,-R8]
ADD R2,R4,R4,LSL #2
1$LDR R3,[R11]:ADD R3,R3,R2,ASR #4
STR R3,[R11]
MOV R3,R4,ASR #4
STR R3,[R11,R8]!
RSB R2,R4,R4,LSL #3
LDR R4,[R10]
ADD R4,R4,R2,ASR #4
ADD R2,R5,R5,LSL #1
9'LDR R3,[R0,-R8]:ADD R3,R3,R2,ASR #4
STR R3,[R0,-R8]
MOV R3,R5,ASR #4
STR R3,[R0,R8]
ADD R2,R5,R5,LSL #2
>#LDR R3,[R0]:ADD R3,R3,R2,ASR #4
STR R3,[R0],#4
RSB R2,R5,R5,LSL #3
LDR R5,[R10,#4]
ADD R5,R5,R2,ASR #4
ADD R2,R6,R6,LSL #1
D'LDR R3,[R0,-R8]:ADD R3,R3,R2,ASR #4
STR R3,[R0,-R8]
ADD R2,R6,R6,LSL #2
G#LDR R3,[R0]:ADD R3,R3,R2,ASR #4
STR R3,[R0]
MOV R3,R6,ASR #4
STR R3,[R0,R8]
RSB R2,R6,R6,LSL #3
LDR R6,[R10,#8]
ADD R6,R6,R2,ASR #4
[OPT Z
LDMIA R10,{R4,R5,R6}
[OPT Z
SUBS R9,R9,#1:BNE fsloop
LDMFD SP !,{PC}^
divtable=P%:
I%=0
[OPT Z
^&EQUD (palette%!I%>>4
&F)/bright%*F
_'EQUD (palette%!I%>>12
&F)/bright%*F
`'EQUD (palette%!I%>>20
&F)/bright%*F
[OPT Z
.ictloc EQUD ict%
I%=0
[OPT Z
EQUD I%/bright%*F
I%=0
[OPT Z
EQUD I%/(bright%
[OPT Z
STMFD SP !,{R14}
v LDR R1,[R9,#5*8]:LDR R1,[R1]
LDR R10,[R9,#4*8]
LDR R11,[R9,#3*8]
y#LDR R12,[R9,#2*8]:LDR R12,[R12]
LDR R8,[R9,#8]:LDR R8,[R8]
LDR R9,[R9]:LDR R9,[R9]
m$="D"
m$="R"
[OPT Z
LDR R4,[R10]
LDR R5,[R10,#4]
LDR R6,[R10,#8]
[OPT Z
LDR R4,[R10],R8
m$<>"D"
[OPT Z
ADR R7,divtable
[OPT Z
.fsloop
[OPT Z
ADD R10,R10,R8
srchdevlist
[OPT Z
MOV r3,r0
[OPT Z
ADD R10,R10,R8
MOV R3,#0
%CMP R4,#F:MOVCS R4,#0:MOVGE R4,#F
CMP R4,#F>>1
SUBCS R4,R4,#F:
RCS R3,R3,#1
%CMP R5,#F:MOVCS R5,#0:MOVGE R5,#F
CMP R5,#F>>1
SUBCS R5,R5,#F:
RCS R3,R3,#2
%CMP R6,#F:MOVCS R6,#0:MOVGE R6,#F
CMP R6,#F>>1
SUBCS R6,R6,#F:
RCS R3,R3,#4
[OPT Z
%CMP R4,#F:MOVCS R4,#0:MOVGE R4,#F
;RSB R3,R4,R4,LSL #4:ADD R3,R3,#F>>1:MOV R3,R3,LSR #bits
LDR R2,[R7,R3,LSL #2]
SUB R4,R4,R2
[OPT Z
%CMP R4,#F:MOVCS R4,#0:MOVGE R4,#F
;RSB R3,R4,R4,LSL #3:ADD R3,R3,#F>>1:MOV R3,R3,LSR #bits
LDR R2,[R7,R3,LSL #2]
SUB R4,R4,R2
[OPT Z
MOV R2,R12,LSR #1
TST R12,#1
LDRB R0,[R2]
EQ R0,R0,#&F0:
REQ R0,R0,R3
NE R0,R0,#&0F:
RNE R0,R0,R3,LSL #4
STRB R0,[R2]
ADD R12,R12,R1
m$="D"
m$="R"
dither%
[OPT Z
ADD R0,R11,#4
ADD R2,R4,R4,LSL #1
(LDR R3,[R11,-R8]:ADD R3,R3,R2,ASR #4
STR R3,[R11,-R8]
ADD R2,R4,R4,LSL #2
$LDR R3,[R11]:ADD R3,R3,R2,ASR #4
STR R3,[R11]
MOV R3,R4,ASR #4
STR R3,[R11,R8]!
RSB R2,R4,R4,LSL #3
LDR R4,[R10]
ADD R4,R4,R2,ASR #4
ADD R2,R5,R5,LSL #1
'LDR R3,[R0,-R8]:ADD R3,R3,R2,ASR #4
STR R3,[R0,-R8]
MOV R3,R5,ASR #4
STR R3,[R0,R8]
ADD R2,R5,R5,LSL #2
#LDR R3,[R0]:ADD R3,R3,R2,ASR #4
STR R3,[R0],#4
RSB R2,R5,R5,LSL #3
LDR R5,[R10,#4]
ADD R5,R5,R2,ASR #4
ADD R2,R6,R6,LSL #1
'LDR R3,[R0,-R8]:ADD R3,R3,R2,ASR #4
STR R3,[R0,-R8]
ADD R2,R6,R6,LSL #2
#LDR R3,[R0]:ADD R3,R3,R2,ASR #4
STR R3,[R0]
MOV R3,R6,ASR #4
STR R3,[R0,R8]
RSB R2,R6,R6,LSL #3
LDR R6,[R10,#8]
ADD R6,R6,R2,ASR #4
[OPT Z
LDMIA R10,{R4,R5,R6}
dither%
[OPT Z
ADD R2,R4,R4,LSL #1
(LDR R3,[R11,-R8]:ADD R3,R3,R2,ASR #4
STR R3,[R11,-R8]
ADD R2,R4,R4,LSL #2
$LDR R3,[R11]:ADD R3,R3,R2,ASR #4
STR R3,[R11]
MOV R3,R4,ASR #4
STR R3,[R11,R8]!
RSB R2,R4,R4,LSL #3
LDR R4,[R10],R8
ADD R4,R4,R2,ASR #4
[OPT Z
LDR R4,[R10],R8
[OPT Z
SUBS R9,R9,#1:BNE fsloop
LDMFD SP !,{PC}^
divtable=P%:
I%=0
[OPT Z
&EQUD (palette%!I%>>4
&F)/bright%*F
'EQUD (palette%!I%>>12
&F)/bright%*F
'EQUD (palette%!I%>>20
&F)/bright%*F
[OPT Z
EQUD 0
EQUD 1/(bright%
EQUD 2/(bright%
EQUD F
[OPT Z
STMFD SP !,{R14}
LDR R1,[R9,#5*8]:LDR R1,[R1]
LDR R10,[R9,#4*8]
LDR R11,[R9,#3*8]
LDR R12,[R9,#2*8]
LDR R12,[R12]
LDR R8,[R9,#8]
LDR R8,[R8]
LDR R9,[R9]
LDR R9,[R9]
m$="C"
m$="R"
[OPT Z
LDR R4,[R10]
LDR R5,[R10,#4]
LDR R6,[R10,#8]
[OPT Z
LDR R4,[R10],R8
[OPT Z
.fsloop
m$<>"C"
[OPT Z
ADR R7,divtable
[OPT Z
ADD R10,R10,R8
:%CMP R4,#F:MOVCS R4,#0:MOVGE R4,#F
;%CMP R5,#F:MOVCS R5,#0:MOVGE R5,#F
<%CMP R6,#F:MOVCS R6,#0:MOVGE R6,#F
MOV R3,#0
CMP R4,#F>>1:
RCS R3,R3,#1
CMP R5,#F>>1:
RCS R3,R3,#2
CMP R6,#F>>1:
RCS R3,R3,#4
A"CMP R3,#6:
Q R3,#1:BEQ octcyan
BCS octwhite
CMP R3,#4:BEQ octblue
MOVCS R3,#2:BCS octmagenta
CMP R3,#2:BEQ octgreen
BCS octyellow
CMP R3,#0:BEQ octblack
.octred
RSB R0,R4,#F
CMP R5,R0
BLT octred1
CMP R5,R6
MOVGE R3,#3
MOVLT R3,#2
B octconvert
.octred1
CMP R0,R6
MOVGE R3,#0
MOVLT R3,#2
B octconvert
.octgreen
RSB R0,R5,#F
CMP R0,R4
BLT octgreen1
CMP R0,R6
MOVGE R3,#0
MOVLT R3,#1
B octconvert
.octgreen1
CMP R4,R6
MOVGE R3,#3
MOVLT R3,#1
B octconvert
.octblue
RSB R0,R6,#F
CMP R0,R4
BLT octblue1
CMP R0,R5
MOVGE R3,#0
MOVLT R3,#1
B octconvert
.octblue1
CMP R4,R5
MOVGE R3,#2
MOVLT R3,#1
B octconvert
.octwhite
CMP R4,R5
BLT octwhite1
CMP R5,R6
MOVGE R3,#3
MOVLT R3,#2
B octconvert
.octwhite1
CMP R4,R6
MOVGE R3,#3
MOVLT R3,#1
.octconvert
CMP R3,#1
.octcyan
SUBEQ R5,R5,#F
SUBEQ R6,R6,#F
.octmagenta
CMP R3,#2
SUBEQ R4,R4,#F
SUBEQ R6,R6,#F
.octyellow
CMP R3,#3
SUBEQ R4,R4,#F
SUBEQ R5,R5,#F
.octblack
MOV R2,R12,LSR #2
R7,R12,#3:MOV R7,R7,LSL #1
MOV R14,#3
ELDRB R0,[R2]:BIC R0,R0,R14,LSL R7:
R R0,R0,R3,LSL R7:STRB R0,[R2]
ADD R12,R12,R1
[OPT Z
ADD R10,R10,R8
%CMP R4,#F:MOVCS R4,#0:MOVGE R4,#F
%CMP R5,#F:MOVCS R5,#0:MOVGE R5,#F
%CMP R6,#F:MOVCS R6,#0:MOVGE R6,#F
STMFD SP !,{R8,R9,R10}
MVN R2,#0
MOV R3,#3
.srch ADD R14,R3,R3,LSL #1
ADD R14,R7,R14,LSL #2
LDMIA R14,{R8,R9,R10}
SUBS R8,R4,R8
RSBMI R8,R8,#0
SUBS R9,R5,R9
RSBMI R9,R9,#0
SUBS R10,R6,R10
RSBMI R10,R10,#0
MOV R14,R8,LSR #bits/2
MUL R8,R14,R14
MOV R14,R9,LSR #bits/2
MUL R9,R14,R14
MOV R14,R10,LSR #bits/2
MUL R10,R14,R14
ADD R9,R9,R9,LSL #2
ADD R8,R8,R8,LSL #1
ADD R14,R8,R9,LSL #1
ADD R14,R14,R10
CMP R14,R2
MOVCC R2,R14
MOVCC R0,R3
SUBS R3,R3,#1
BPL srch
LDMFD SP !,{R8,R9,R10}
+ADD R3,R0,R0,LSL #1:ADD R3,R7,R3,LSL #2
LDR R2,[R3],#4:SUB R4,R4,R2
.LDMIA R3,{R2,R3}:SUB R5,R5,R2:SUB R6,R6,R3
MOV R3,R0
MOV R2,R12,LSR #2
R7,R12,#3:MOV R7,R7,LSL #1
MOV R14,#3
ELDRB R0,[R2]:BIC R0,R0,R14,LSL R7:
R R0,R0,R3,LSL R7:STRB R0,[R2]
ADD R12,R12,R1
[OPT Z
%CMP R4,#F:MOVCS R4,#0:MOVGE R4,#F
:RSB R3,R4,R4,LSL #2:ADD R3,R3,#F>>1:MOV R3,R3,LSR#bits
LDR R2,[R7,R3,LSL #2]
SUB R4,R4,R2
MOV R2,R12,LSR #2
R5,R12,#3:MOV R5,R5,LSL #1
MOV R6,#3
DLDRB R0,[R2]:BIC R0,R0,R6,LSL R5:
R R0,R0,R3,LSL R5:STRB R0,[R2]
ADD R12,R12,R1
m$="C"
m$="R"
dither%
[OPT Z
ADD R0,R11,#4
ADD R2,R4,R4,LSL #1
(LDR R3,[R11,-R8]:ADD R3,R3,R2,ASR #4
STR R3,[R11,-R8]
ADD R2,R4,R4,LSL #2
$LDR R3,[R11]:ADD R3,R3,R2,ASR #4
STR R3,[R11]
MOV R3,R4,ASR #4
STR R3,[R11,R8]!
RSB R2,R4,R4,LSL #3
LDR R4,[R10]
ADD R4,R4,R2,ASR #4
ADD R2,R5,R5,LSL #1
'LDR R3,[R0,-R8]:ADD R3,R3,R2,ASR #4
STR R3,[R0,-R8]
MOV R3,R5,ASR #4
STR R3,[R0,R8]
ADD R2,R5,R5,LSL #2
#LDR R3,[R0]:ADD R3,R3,R2,ASR #4
STR R3,[R0],#4
RSB R2,R5,R5,LSL #3
LDR R5,[R10,#4]
ADD R5,R5,R2,ASR #4
ADD R2,R6,R6,LSL #1
'LDR R3,[R0,-R8]:ADD R3,R3,R2,ASR #4
STR R3,[R0,-R8]
ADD R2,R6,R6,LSL #2
#LDR R3,[R0]:ADD R3,R3,R2,ASR #4
STR R3,[R0]
MOV R3,R6,ASR #4
STR R3,[R0,R8]
RSB R2,R6,R6,LSL #3
LDR R6,[R10,#8]
ADD R6,R6,R2,ASR #4
[OPT Z
LDMIA R10,{R4,R5,R6}
dither%
[OPT Z
ADD R2,R4,R4,LSL #1
(LDR R3,[R11,-R8]:ADD R3,R3,R2,ASR #4
STR R3,[R11,-R8]
ADD R2,R4,R4,LSL #2
$LDR R3,[R11]:ADD R3,R3,R2,ASR #4
STR R3,[R11]
MOV R3,R4,ASR #4
STR R3,[R11,R8]!
RSB R2,R4,R4,LSL #3
LDR R4,[R10],R8
ADD R4,R4,R2,ASR #4
[OPT Z
LDR R4,[R10],R8
[OPT Z
SUBS R9,R9,#1:BNE fsloop
LDMFD SP !,{PC}^
[OPT Z
.divtable EQUD 0
EQUD (1-black%/256*2)/16*F
EQUD (2-black%/256*4)/16*F
EQUD (3-black%/256*5)/16*F
EQUD (4-black%/256*6)/16*F
EQUD (5-black%/256*7)/16*F
EQUD (6-black%/256*8)/16*F
EQUD (7-black%/256*8)/16*F
EQUD (8-black%/256*8)/16*F
EQUD (9-black%/256*8)/16*F
EQUD (10-black%/256*8)/16*F
EQUD (11-black%/256*7)/16*F
EQUD (12-black%/256*6)/16*F
EQUD (13-black%/256*5)/16*F
EQUD (14-black%/256*4)/16*F
EQUD (15-black%/256*2)/16*F
EQUD F
.evenrow_gard DCD even_gard
.oddrow_gard DCD odd_gard
.rowinc DCD 0
STMFD SP !,{R14}
% LDR R1,[R9,#5*8]:LDR R1,[R1]
LDR R10,[R9,#4*8]
LDR R11,[R9,#3*8]
LDR R12,[R9,#2*8]
LDR R12,[R12]
LDR R8,[R9,#8]
LDR R8,[R8]
LDR R9,[R9]
LDR R9,[R9]
LDR R4,[R10],R8
TEQ R8,#0
LDRPL R6,evenrow_gard
LDRMI R6,oddrow_gard
MOV R1,R1,LSL #1
LDR R7,rowinc
ADR R14,divtable
.fsloop
6%CMP R4,#F:MOVCS R4,#0:MOVGE R4,#F
ADD R5,R4,#F>>5
MOVS R5,R5,LSR #bits-4
LDRNE R0,[R14,R5,LSL #2]
SUBNE R4,R4,R0
dither%
[OPT Z
ADD R2,R4,R4,LSL #1
?(LDR R3,[R11,-R8]:ADD R3,R3,R2,ASR #4
STR R3,[R11,-R8]
ADD R2,R4,R4,LSL #2
B$LDR R3,[R11]:ADD R3,R3,R2,ASR #4
STR R3,[R11]
MOV R3,R4,ASR #4
STR R3,[R11,R8]!
RSB R2,R4,R4,LSL #3
LDR R4,[R10],R8
ADDS R4,R4,R2,ASR #4
[OPT Z
LDR R4,[R10],R8
[OPT Z
P%CMP R4,#F:MOVCS R4,#0:MOVGE R4,#F
ADD R3,R4,#F>>5
MOVS R3,R3,LSR #bits-4
LDRNE R0,[R14,R3,LSL #2]
SUBNE R4,R4,R0
R R5,R5,R3,LSL #5:LDR R3,[R6,R5,LSL #2]
VFMOV R2,R12,LSR #1:STRB R3,[R2],R7:MOV R3,R3,LSR #8:STRB R3,[R2],R7
WBMOV R3,R3,LSR #8:STRB R3,[R2],R7:MOV R3,R3,LSR #8:STRB R3,[R2]
ADD R12,R12,R1
dither%
[OPT Z
ADD R2,R4,R4,LSL #1
](LDR R3,[R11,-R8]:ADD R3,R3,R2,ASR #4
STR R3,[R11,-R8]
ADD R2,R4,R4,LSL #2
`$LDR R3,[R11]:ADD R3,R3,R2,ASR #4
STR R3,[R11]
MOV R3,R4,ASR #4
STR R3,[R11,R8]!
RSB R2,R4,R4,LSL #3
LDR R4,[R10],R8
ADD R4,R4,R2,ASR #4
[OPT Z
LDR R4,[R10],R8
[OPT Z
SUBS R9,R9,#2:BNE fsloop
LDMFD SP !,{PC}^
[OPT Z
.divtable EQUD 0
EQUD (1-black%/256*2)/9*F
EQUD (2-black%/256*4)/9*F
EQUD (3-black%/256*5)/9*F
EQUD (4-black%/256*6)/9*F
EQUD (5-black%/256*6)/9*F
EQUD (6-black%/256*5)/9*F
EQUD (7-black%/256*4)/9*F
EQUD (8-black%/256*2)/9*F
EQUD F
.evenrow_gard DCD even_gard
.oddrow_gard DCD odd_gard
.rowinc DCD 0
STMFD SP !,{R14}
LDR R1,[R9,#5*8]:LDR R1,[R1]
LDR R10,[R9,#4*8]
LDR R11,[R9,#3*8]
LDR R12,[R9,#2*8]
LDR R12,[R12]
LDR R8,[R9,#8]
LDR R8,[R8]
LDR R9,[R9]
LDR R9,[R9]
LDR R4,[R10],R8
TEQ R8,#0
LDRPL R6,evenrow_gard
LDRMI R6,oddrow_gard
MOV R1,R1,LSL #1
LDR R7,rowinc
ADR R14,divtable
.fsloop
%CMP R4,#F:MOVCS R4,#0:MOVGE R4,#F
ADD R5,R4,#F>>4
ADD R5,R5,R5,LSL #3
MOVS R5,R5,LSR #bits
LDRNE R0,[R14,R5,LSL #2]
SUBNE R4,R4,R0
dither%
[OPT Z
ADD R2,R4,R4,LSL #1
(LDR R3,[R11,-R8]:ADD R3,R3,R2,ASR #4
STR R3,[R11,-R8]
ADD R2,R4,R4,LSL #2
$LDR R3,[R11]:ADD R3,R3,R2,ASR #4
STR R3,[R11]
MOV R3,R4,ASR #4
STR R3,[R11,R8]!
RSB R2,R4,R4,LSL #3
LDR R4,[R10],R8
ADDS R4,R4,R2,ASR #4
[OPT Z
LDR R4,[R10],R8
[OPT Z
%CMP R4,#F:MOVCS R4,#0:MOVGE R4,#F
ADD R3,R4,#F>>4
ADD R3,R3,R3,LSL #3
MOVS R3,R3,LSR #bits
LDRNE R0,[R14,R3,LSL #2]
SUBNE R4,R4,R0
R R5,R5,R3,LSL #4:LDR R5,[R6,R5,LSL #2]
MOV R2,R12,LSR #1
R3,R5,#&3F
STRB R3,[R2],R7
!MOV R3,R5,LSR #6:
R3,R3,#&3F
STRB R3,[R2],R7
"MOV R3,R5,LSR #12:STRB R3,[R2]
ADD R12,R12,R1
dither%
[OPT Z
ADD R2,R4,R4,LSL #1
(LDR R3,[R11,-R8]:ADD R3,R3,R2,ASR #4
STR R3,[R11,-R8]
ADD R2,R4,R4,LSL #2
$LDR R3,[R11]:ADD R3,R3,R2,ASR #4
STR R3,[R11]
MOV R3,R4,ASR #4
STR R3,[R11,R8]!
RSB R2,R4,R4,LSL #3
LDR R4,[R10],R8
ADD R4,R4,R2,ASR #4
[OPT Z
LDR R4,[R10],R8
[OPT Z
SUBS R9,R9,#2:BNE fsloop
LDMFD SP !,{PC}^
[OPT Z
.divtable EQUD 0
EQUD (1-black%/256*2)/4*F
EQUD (2-black%/256*4)/4*F
EQUD (3-black%/256*2)/4*F
EQUD F
.evenrow_gard DCD even_gard
.oddrow_gard DCD odd_gard
.rowinc DCD 0
STMFD SP !,{R14}
LDR R1,[R9,#5*8]:LDR R1,[R1]
LDR R10,[R9,#4*8]
LDR R11,[R9,#3*8]
LDR R12,[R9,#2*8]
LDR R12,[R12]
LDR R8,[R9,#8]
LDR R8,[R8]
LDR R9,[R9]
LDR R9,[R9]
LDR R4,[R10],R8
TEQ R8,#0
LDRPL R6,evenrow_gard
LDRMI R6,oddrow_gard
MOV R1,R1,LSL #1
LDR R7,rowinc
ADR R14,divtable
.fsloop
%CMP R4,#F:MOVCS R4,#0:MOVGE R4,#F
ADD R5,R4,#F>>3
MOVS R5,R5,LSR #bits-2
LDRNE R0,[R14,R5,LSL #2]
SUBNE R4,R4,R0
dither%
[OPT Z
ADD R2,R4,R4,LSL #1
(LDR R3,[R11,-R8]:ADD R3,R3,R2,ASR #4
STR R3,[R11,-R8]
ADD R2,R4,R4,LSL #2
$LDR R3,[R11]:ADD R3,R3,R2,ASR #4
STR R3,[R11]
MOV R3,R4,ASR #4
STR R3,[R11,R8]!
RSB R2,R4,R4,LSL #3
LDR R4,[R10],R8
ADDS R4,R4,R2,ASR #4
[OPT Z
LDR R4,[R10],R8
[OPT Z
%CMP R4,#F:MOVCS R4,#0:MOVGE R4,#F
ADD R3,R4,#F>>3
MOVS R3,R3,LSR #bits-2
LDRNE R0,[R14,R3,LSL #2]
SUBNE R4,R4,R0
R R5,R5,R3,LSL #3:LDRB R5,[R6,R5]
MOV R2,R12,LSR #2
TST R12,#2
R3,R5,#&F:LDRB R0,[R2]
EQ R0,R0,#&F0:
REQ R0,R0,R3
NE R0,R0,#&0F:
RNE R0,R0,R3,LSL #4
STRB R0,[R2],R7
!MOV R3,R5,LSR #4:LDRB R0,[R2]
EQ R0,R0,#&F0:
REQ R0,R0,R3
NE R0,R0,#&0F:
RNE R0,R0,R3,LSL #4
STRB R0,[R2]
ADD R12,R12,R1
dither%
[OPT Z
ADD R2,R4,R4,LSL #1
(LDR R3,[R11,-R8]:ADD R3,R3,R2,ASR #4
STR R3,[R11,-R8]
ADD R2,R4,R4,LSL #2
#$LDR R3,[R11]:ADD R3,R3,R2,ASR #4
STR R3,[R11]
MOV R3,R4,ASR #4
STR R3,[R11,R8]!
RSB R2,R4,R4,LSL #3
LDR R4,[R10],R8
ADD R4,R4,R2,ASR #4
[OPT Z
LDR R4,[R10],R8
[OPT Z
SUBS R9,R9,#2:BNE fsloop
LDMFD SP !,{PC}^
[OPT Z
STMFD SP !,{R14}
8 LDR R1,[R9,#5*8]:LDR R1,[R1]
LDR R10,[R9,#4*8]
LDR R11,[R9,#3*8]
LDR R12,[R9,#2*8]
LDR R12,[R12]
LDR R8,[R9,#8]
LDR R8,[R8]
LDR R9,[R9]
LDR R9,[R9]
LDR R4,[R10],R8
MOV R7,#1
.fsloop
D%CMP R4,#F:MOVCS R4,#0:MOVGE R4,#F
black%
[OPT Z
MOV R2,R12,LSR #3
R5,R12,#7:MOV R6,#1
LDRB R0,[R2,#-(x%+7>>3)]
SUB R3,R4,#F
CMP R7,#0
M!ADDNE R4,R4,#black%<<(bits-8)
N!ADDEQ R3,R3,#black%<<(bits-8)
TST R0,R6,LSL R5
P!ADDNE R4,R4,#black%<<(bits-8)
Q!ADDEQ R3,R3,#black%<<(bits-8)
MOVS R0,R3:RSBMI R0,R3,#0
CMP R4,R0
MOVCC R3,#0
MOVCS R4,R3:MOVCS R3,#1
MOV R7,R3
[OPT Z
Z'ADD R3,R4,#F>>1:MOV R3,R3,LSR #bits
SUB R4,R4,R3,LSL #bits
MOV R2,R12,LSR #3
R5,R12,#7:MOV R6,#1
[OPT Z
a7LDRB R0,[R2]:BIC R0,R0,R6,LSL R5:
R R0,R0,R3,LSL R5
STRB R0,[R2]
ADD R12,R12,R1
dither%
[OPT Z
ADD R2,R4,R4,LSL #1
h(LDR R3,[R11,-R8]:ADD R3,R3,R2,ASR #4
STR R3,[R11,-R8]
ADD R2,R4,R4,LSL #2
k$LDR R3,[R11]:ADD R3,R3,R2,ASR #4
STR R3,[R11]
MOV R3,R4,ASR #4
STR R3,[R11,R8]!
RSB R2,R4,R4,LSL #3
LDR R4,[R10],R8
ADD R4,R4,R2,ASR #4
[OPT Z
LDR R4,[R10],R8
[OPT Z
SUBS R9,R9,#1:BNE fsloop
LDMFD SP !,{PC}^
[OPT Z
.sxloc DCD sx%
col
input<=8
[OPT Z
.mappix%
LDR R0,sxloc
LDR R1,[R9]:LDR R1,[R1]
LDR R2,[R9,#3*8]
LDR R5,[R9,#4*8]
MOV R8,#0
.mappixlp
LDRB R6,[R1],#step24
input
ham
[OPT Z
ADR R9,ltable
!MOVS R7,R6,LSR #4:
R6,R6,#15
2LDREQ R10,[R2,R6,LSL #2]:
Q R11,R10:
Q R12,R10
&CMP R7,#1:LDREQ R12,[R9,R6,LSL #2]
&CMP R7,#2:LDREQ R10,[R9,R6,LSL #2]
&CMP R7,#3:LDREQ R11,[R9,R6,LSL #2]
ADD R3,R10,R11
ADD R3,R3,R12
MOV R3,R3,LSR #2
STMIA R5!,{R3}
SUBS R0,R0,#1:BNE mappixlp
MOVS PC,R14
.ltable
I%=0
[OPT Z
EQUD I%/15*F
hpredict%=2
[OPT Z
ADD R6,R6,R8
R6,R6,#255
MOV R8,R6
[OPT Z
(LDR R7,[R2,R6,LSL #2]:STR R7,[R5],#4
SUBS R0,R0,#1:BNE mappixlp
MOVS PC,R14
bigendianbits
[OPT Z
MOV R10,R6,LSR #4
LDR R7,[R2,R10,LSL #2]
R10,R6,#&F
[OPT Z
R10,R6,#&F
LDR R7,[R2,R10,LSL #2]
MOV R10,R6,LSR #4
[OPT Z
,LDR R8,[R2,R10,LSL #2]:STMIA R5!,{R7,R8}
SUBS R0,R0,#2:BHI mappixlp
MOVS PC,R14
bigendianbits
[OPT Z
MOV R10,R6,LSR #6
LDR R7,[R2,R10,LSL #2]
R10,R6,#&30
LDR R8,[R2,R10,LSR #2]
R10,R6,#&C
LDR R9,[R2,R10]
R10,R6,#&3
[OPT Z
R10,R6,#&3
LDR R7,[R2,R10,LSL #2]
R10,R6,#&C
LDR R8,[R2,R10]
R10,R6,#&30
LDR R9,[R2,R10,LSR #2]
MOV R10,R6,LSR #6
[OPT Z
4LDR R10,[R2,R10,LSL #2]:STMIA R5!,{R7,R8,R9,R10}
SUBS R0,R0,#4:BHI mappixlp
MOVS PC,R14
bigendianbits
[OPT Z
R10,R6,#&80
LDR R7,[R2,R10,LSR #5]
R10,R6,#&40
LDR R8,[R2,R10,LSR #4]
R10,R6,#&20
LDR R9,[R2,R10,LSR #3]
R10,R6,#&10
4LDR R10,[R2,R10,LSR #2]:STMIA R5!,{R7,R8,R9,R10}
R10,R6,#&8
LDR R7,[R2,R10,LSR #1]
R10,R6,#&4
LDR R8,[R2,R10]
R10,R6,#&2
LDR R9,[R2,R10,LSL #1]
R10,R6,#&1
[OPT Z
R10,R6,#&1
LDR R7,[R2,R10,LSL #2]
R10,R6,#&2
LDR R8,[R2,R10,LSL #1]
R10,R6,#&4
LDR R9,[R2,R10]
R10,R6,#&8
4LDR R10,[R2,R10,LSR #1]:STMIA R5!,{R7,R8,R9,R10}
R10,R6,#&10
LDR R7,[R2,R10,LSR #2]
R10,R6,#&20
LDR R8,[R2,R10,LSR #3]
R10,R6,#&40
LDR R9,[R2,R10,LSR #4]
MOV R10,R6,LSR #7
[OPT Z
4LDR R10,[R2,R10,LSL #2]:STMIA R5!,{R7,R8,R9,R10}
SUBS R0,R0,#8:BHI mappixlp
MOVS PC,R14
[OPT Z
.mappix%
LDR R0,sxloc
LDR R1,[R9]:LDR R1,[R1]
LDR R2,[R9,#8]:LDR R2,[R2]
LDR R3,[R9,#4*8]
LDR R4,[R9,#3*8]
LDR R5,[R9,#2*8]
LDR R6,[R9,#5*8]
LDR R7,[R9,#6*8]
LDR R8,[R9,#7*8]
CMP R1,R2
ADDEQ R2,R2,#1
.mappixlp
.LDRB R9,[R1],#step24:LDRB R10,[R2],#step24
>LDR R9,[R6,R9,LSL #2]:LDR R10,[R7,R10,LSL #2]:
R R9,R9,R10
R10,R9,#255:LDR R10,[R3,R10,LSL #2]
<MOV R11,R9,LSR #8:
R11,R11,#255:LDR R11,[R4,R11,LSL #2]
.MOV R12,R9,LSR #16:LDR R12,[R5,R12,LSL #2]
!3ADD R10,R10,R11:ADD R10,R10,R12:STMIA R8!,{R10}
SUBS R0,R0,#1:BNE mappixlp
MOVS PC,R14
[OPT Z
.mappix%
LDR R0,sxloc
) LDR R1,[R9,#2*8]:LDR R1,[R1]
LDR R2,[R9,#8]:LDR R2,[R2]
LDR R3,[R9]:LDR R3,[R3]
LDR R4,[R9,#5*8]
LDR R5,[R9,#4*8]
LDR R6,[R9,#3*8]
LDR R7,[R9,#6*8]
STMFD SP !,{R14}
1$MOV r11,#0:MOV R12,#0:MOV R14,#0
.mappixlp
3CLDRB R8,[R1],#step24:LDRB R9,[R2],#step24:LDRB R10,[R3],#step24
hpredict%=2
[OPT Z
ADD r8,r8,r11
r8,r8,#255
MOV r11,r8
ADD r9,r9,r12
r9,r9,#255
MOV r12,r9
ADD r10,r10,r14
r10,r10,#255
MOV r14,r10
[OPT Z
CGLDR R8,[R4,R8,LSL #2]:LDR R9,[R5,R9,LSL #2]:LDR R10,[R6,R10,LSL #2]
D-ADD R8,R8,R9:ADD R8,R8,R10:STR R8,[R7],#4
SUBS R0,R0,#1:BNE mappixlp
LDMFD SP !,{PC}^
[OPT Z
.mappix%
LDR R0,sxloc
L LDR R1,[R9,#2*8]:LDR R1,[R1]
LDR R2,[R9,#8]:LDR R2,[R2]
LDR R3,[R9]:LDR R3,[R3]
LDR R4,[R9,#5*8]
LDR R5,[R9,#4*8]
LDR R6,[R9,#3*8]
LDR R7,[R9,#6*8]
STMFD SP !,{R14}
T?MOV r11,#colourindex
255:ADD r11,r11,#colourindex
&ff00
.mappixlp
V@LDR R8,[R1],#step24:LDR R9,[R2],#step24:LDR R10,[R3],#step24
r8,r8,r11:
r9,r9,r11:
r10,r10,r11
XGLDR R8,[R4,R8,LSL #2]:LDR R9,[R5,R9,LSL #2]:LDR R10,[R6,R10,LSL #2]
Y-ADD R8,R8,R9:ADD R8,R8,R10:STR R8,[R7],#4
SUBS R0,R0,#1:BNE mappixlp
LDMFD SP !,{PC}^
[OPT Z
.mappix%
LDR R0,sxloc
LDR R1,[R9]:LDR R1,[R1]
LDR R4,[R9,#1*8]
LDR R7,[R9,#8*8]
.mappixlp
LDRB R8,[R1],#2
f>LDR R8,[R4,R8,LSL #2]:CMP R8,#F:MOVCS R8,#F:STR R8,[R7],#4
SUBS R0,R0,#1:BNE mappixlp
MOVS PC,R14
[OPT Z
.mappix%
LDR R0,sxloc
LDR R1,[R9]:LDR R1,[R1]
ADD R1,R1,#1
LDR R4,[R9,#1*8]
LDR R7,[R9,#8*8]
.mappixlp
LDRB R8,[R1],#2
t>LDR R8,[R4,R8,LSL #2]:CMP R8,#F:MOVCS R8,#F:STR R8,[R7],#4
SUBS R0,R0,#1:BNE mappixlp
MOVS PC,R14
[OPT Z
.mappix%
LDR R0,sxloc
LDR R1,[R9]:LDR R1,[R1]
ADD R1,R1,#1
LDR R4,[R9,#1*8]
LDR R7,[R9,#8*8]
.mappixlp
LDRB R8,[R1],#2
R8,R8,#ymax%
>LDR R8,[R4,R8,LSL #2]:CMP R8,#F:MOVCS R8,#F:STR R8,[R7],#4
SUBS R0,R0,#1:BNE mappixlp
MOVS PC,R14
xmul%=2
xdiv%=1
[OPT Z
.xsample%
LDR R0,[R9]:LDR R0,[R0]
LDR R1,[R9,#8]
LDR R2,[R9,#2*8]
SUBS R0,R0,#2
BEQ xdonediv
BMI xdonediv
.xsamplelp
LDMIA R1,{R5,R6}
ADD R6,R6,R5
MOV R6,R6,LSR #1
STMIA R2!,{R5,R6}
ADD R1,R1,#4
SUBS R0,R0,#2:BGT xsamplelp
.xdonediv
LDMIA R1,{R5}
MOV R6,R5
STMIA R2!,{R5,R6}
MOVS PC,R14
[OPT Z
.xsample%
LDR R0,[R9]:LDR R0,[R0]
LDR R1,[R9,#8]
LDR R2,[R9,#2*8]
LDR R3,[R9,#3*8]:LDR R3,[R3]
LDR R4,[R9,#4*8]:LDR R4,[R4]
MOV R11,R4
.xsamplelp
LDMIA R1,{R5}
,SUBS R11,R11,#1:
Q R11,R4:ADDEQ R1,R1,#4
SUBS R12,R3,#1
BEQ xdonediv
.xdivlp
CMP R12,R11
BCC xdivlp2
#LDMIA R1!,{R8}:MLA R5,R8,R11,R5
SUBS R12,R12,R11:MOV R11,R4
BNE xdivlp
B xdonediv
.xdivlp2
LDMIA R1,{R8}
,SUBS R11,R11,#1:
Q R11,R4:ADDEQ R1,R1,#4
ADD R5,R5,R8
SUBS R12,R12,#1:BNE xdivlp
.xdonediv
STMIA R2!,{R5}
SUBS R0,R0,#1:BPL xsamplelp
MOVS PC,R14
input<=8
[OPT Z
.mappix%
LDR R0,sxloc
LDR R1,[R9]:LDR R1,[R1]
LDR R2,[R9,#3*8]
LDR R3,[R9,#2*8]
LDR R4,[R9,#8]
LDR R5,[R9,#4*8]
MOV R10,#0
.mappixlp
LDRB R6,[R1],#step24
input
ham
[OPT Z
ADR R9,ltable
!MOVS R7,R6,LSR #4:
R6,R6,#15
NLDREQ R10,[R2,R6,LSL #2]:LDREQ R11,[R3,R6,LSL #2]:LDREQ R12,[R4,R6,LSL #2]
&CMP R7,#1:LDREQ R12,[R9,R6,LSL #2]
&CMP R7,#2:LDREQ R10,[R9,R6,LSL #2]
&CMP R7,#3:LDREQ R11,[R9,R6,LSL #2]
STMIA R5!,{R10,R11,R12}
SUBS R0,R0,#1:BNE mappixlp
MOVS PC,R14
.ltable
I%=0
[OPT Z
EQUD I%/15*F
hpredict%=2
[OPT Z
ADD R6,R6,R10
R6,R6,#255
MOV R10,R6
[OPT Z
ELDR R7,[R2,R6,LSL #2]:LDR R8,[R3,R6,LSL #2]:LDR R9,[R4,R6,LSL #2]
STMIA R5!,{R7,R8,R9}
SUBS R0,R0,#1:BNE mappixlp
MOVS PC,R14
bigendianbits
[OPT Z
MOV R10,R6,LSR #4
HLDR R7,[R2,R10,LSL #2]:LDR R8,[R3,R10,LSL #2]:LDR R9,[R4,R10,LSL #2]
STMIA R5!,{R7,R8,R9}
R10,R6,#&F
[OPT Z
R10,R6,#&F
HLDR R7,[R2,R10,LSL #2]:LDR R8,[R3,R10,LSL #2]:LDR R9,[R4,R10,LSL #2]
STMIA R5!,{R7,R8,R9}
MOV R10,R6,LSR #4
[OPT Z
HLDR R7,[R2,R10,LSL #2]:LDR R8,[R3,R10,LSL #2]:LDR R9,[R4,R10,LSL #2]
STMIA R5!,{R7,R8,R9}
SUBS R0,R0,#2:BHI mappixlp
MOVS PC,R14
bigendianbits
[OPT Z
MOV R10,R6,LSR #6
HLDR R7,[R2,R10,LSL #2]:LDR R8,[R3,R10,LSL #2]:LDR R9,[R4,R10,LSL #2]
STMIA R5!,{R7,R8,R9}
R10,R6,#&30
HLDR R7,[R2,R10,LSR #2]:LDR R8,[R3,R10,LSR #2]:LDR R9,[R4,R10,LSR #2]
STMIA R5!,{R7,R8,R9}
R10,R6,#&C
3LDR R7,[R2,R10]:LDR R8,[R3,R10]:LDR R9,[R4,R10]
STMIA R5!,{R7,R8,R9}
R10,R6,#&3
[OPT Z
R10,R6,#&3
HLDR R7,[R2,R10,LSL #2]:LDR R8,[R3,R10,LSL #2]:LDR R9,[R4,R10,LSL #2]
STMIA R5!,{R7,R8,R9}
R10,R6,#&C
3LDR R7,[R2,R10]:LDR R8,[R3,R10]:LDR R9,[R4,R10]
STMIA R5!,{R7,R8,R9}
R10,R6,#&30
HLDR R7,[R2,R10,LSR #2]:LDR R8,[R3,R10,LSR #2]:LDR R9,[R4,R10,LSR #2]
STMIA R5!,{R7,R8,R9}
MOV R10,R6,LSR #6
[OPT Z
#HLDR R7,[R2,R10,LSL #2]:LDR R8,[R3,R10,LSL #2]:LDR R9,[R4,R10,LSL #2]
STMIA R5!,{R7,R8,R9}
SUBS R0,R0,#4:BHI mappixlp
MOVS PC,R14
bigendianbits
[OPT Z
R10,R6,#&80
,HLDR R7,[R2,R10,LSR #5]:LDR R8,[R3,R10,LSR #5]:LDR R9,[R4,R10,LSR #5]
STMIA R5!,{R7,R8,R9}
R10,R6,#&40
/HLDR R7,[R2,R10,LSR #4]:LDR R8,[R3,R10,LSR #4]:LDR R9,[R4,R10,LSR #4]
STMIA R5!,{R7,R8,R9}
R10,R6,#&20
2HLDR R7,[R2,R10,LSR #3]:LDR R8,[R3,R10,LSR #3]:LDR R9,[R4,R10,LSR #3]
STMIA R5!,{R7,R8,R9}
R10,R6,#&10
5HLDR R7,[R2,R10,LSR #2]:LDR R8,[R3,R10,LSR #2]:LDR R9,[R4,R10,LSR #2]
STMIA R5!,{R7,R8,R9}
R10,R6,#&8
8HLDR R7,[R2,R10,LSR #1]:LDR R8,[R3,R10,LSR #1]:LDR R9,[R4,R10,LSR #1]
STMIA R5!,{R7,R8,R9}
R10,R6,#&4
;3LDR R7,[R2,R10]:LDR R8,[R3,R10]:LDR R9,[R4,R10]
STMIA R5!,{R7,R8,R9}
R10,R6,#&2
>HLDR R7,[R2,R10,LSL #1]:LDR R8,[R3,R10,LSL #1]:LDR R9,[R4,R10,LSL #1]
STMIA R5!,{R7,R8,R9}
R10,R6,#&1
[OPT Z
R10,R6,#&1
EHLDR R7,[R2,R10,LSL #2]:LDR R8,[R3,R10,LSL #2]:LDR R9,[R4,R10,LSL #2]
STMIA R5!,{R7,R8,R9}
R10,R6,#&2
HHLDR R7,[R2,R10,LSL #1]:LDR R8,[R3,R10,LSL #1]:LDR R9,[R4,R10,LSL #1]
STMIA R5!,{R7,R8,R9}
R10,R6,#&4
K3LDR R7,[R2,R10]:LDR R8,[R3,R10]:LDR R9,[R4,R10]
STMIA R5!,{R7,R8,R9}
R10,R6,#&8
NHLDR R7,[R2,R10,LSR #1]:LDR R8,[R3,R10,LSR #1]:LDR R9,[R4,R10,LSR #1]
STMIA R5!,{R7,R8,R9}
R10,R6,#&10
QHLDR R7,[R2,R10,LSR #2]:LDR R8,[R3,R10,LSR #2]:LDR R9,[R4,R10,LSR #2]
STMIA R5!,{R7,R8,R9}
R10,R6,#&20
THLDR R7,[R2,R10,LSR #3]:LDR R8,[R3,R10,LSR #3]:LDR R9,[R4,R10,LSR #3]
STMIA R5!,{R7,R8,R9}
R10,R6,#&40
WHLDR R7,[R2,R10,LSR #4]:LDR R8,[R3,R10,LSR #4]:LDR R9,[R4,R10,LSR #4]
STMIA R5!,{R7,R8,R9}
MOV R10,R6,LSR #7
[OPT Z
]HLDR R7,[R2,R10,LSL #2]:LDR R8,[R3,R10,LSL #2]:LDR R9,[R4,R10,LSL #2]
STMIA R5!,{R7,R8,R9}
SUBS R0,R0,#8:BHI mappixlp
MOVS PC,R14
[OPT Z
.mappix%
LDR R0,sxloc
LDR R1,[R9]:LDR R1,[R1]
LDR R2,[R9,#8]:LDR R2,[R2]
LDR R3,[R9,#4*8]
LDR R4,[R9,#3*8]
LDR R5,[R9,#2*8]
LDR R6,[R9,#5*8]
LDR R7,[R9,#6*8]
LDR R8,[R9,#7*8]
CMP R1,R2
ADDEQ R2,R2,#1
.mappixlp
q.LDRB R9,[R1],#step24:LDRB R10,[R2],#step24
r>LDR R9,[R6,R9,LSL #2]:LDR R10,[R7,R10,LSL #2]:
R R9,R9,R10
R10,R9,#255:LDR R10,[R3,R10,LSL #2]
t<MOV R11,R9,LSR #8:
R11,R11,#255:LDR R11,[R4,R11,LSL #2]
u.MOV R12,R9,LSR #16:LDR R12,[R5,R12,LSL #2]
STMIA R8!,{R10,R11,R12}
SUBS R0,R0,#1:BNE mappixlp
MOVS PC,R14
[OPT Z
.mappix%
LDR R0,sxloc
~ LDR R1,[R9,#2*8]:LDR R1,[R1]
LDR R2,[R9,#8]:LDR R2,[R2]
LDR R3,[R9]:LDR R3,[R3]
LDR R4,[R9,#5*8]
LDR R5,[R9,#4*8]
LDR R6,[R9,#3*8]
LDR R7,[R9,#6*8]
STMFD SP !,{R14}
$MOV r11,#0:MOV R12,#0:MOV R14,#0
.mappixlp
CLDRB R8,[R1],#step24:LDRB R9,[R2],#step24:LDRB R10,[R3],#step24
hpredict%=2
[OPT Z
ADD r8,r8,r11
r8,r8,#255
MOV r11,r8
ADD r9,r9,r12
r9,r9,#255
MOV r12,r9
ADD r10,r10,r14
r10,r10,#255
MOV r14,r10
[OPT Z
GLDR R8,[R4,R8,LSL #2]:LDR R9,[R5,R9,LSL #2]:LDR R10,[R6,R10,LSL #2]
STMIA R7!,{R8,R9,R10}
SUBS R0,R0,#1:BNE mappixlp
LDMFD SP !,{PC}^
[OPT Z
.mappix%
LDR R0,sxloc
LDR R1,[R9,#2*8]:LDR R1,[R1]
LDR R2,[R9,#8]:LDR R2,[R2]
LDR R3,[R9]:LDR R3,[R3]
LDR R4,[R9,#5*8]
LDR R5,[R9,#4*8]
LDR R6,[R9,#3*8]
LDR R7,[R9,#6*8]
STMFD SP !,{R14}
?MOV r11,#colourindex
255:ADD r11,r11,#colourindex
&ff00
.mappixlp
@LDR R8,[R1],#step24:LDR R9,[R2],#step24:LDR R10,[R3],#step24
r8,r8,r11:
r9,r9,r11:
r10,r10,r11
GLDR R8,[R4,R8,LSL #2]:LDR R9,[R5,R9,LSL #2]:LDR R10,[R6,R10,LSL #2]
STMIA R7!,{R8,R9,R10}
SUBS R0,R0,#1:BNE mappixlp
LDMFD SP !,{PC}^
[OPT Z
.mappix%
LDR R0,sxloc
LDR R1,[R9]:LDR R1,[R1]
LDR R2,[R9,#1*8]
LDR R3,[R9,#2*8]
LDR R5,[R9,#4*8]
LDR R6,[R9,#5*8]
LDR R7,[R9,#6*8]
LDR R9,[R9,#8*8]
STMFD SP !,{R14}
.mappixlp
LDMIA R1!,{R4,R10}
R8,R4,#&C000
MOV R8,R8,LSR #8
R14,R4,#&C0000000
R R8,R8,R14,LSR #16+8+2
R14,R10,#&C000
R R8,R8,R14,LSR #8+4
R R8,R8,R10,LSR #16+8+6
R11,R4,#&3000
MOV R11,R11,LSR #6
R14,R4,#&30000000
R R11,R11,R14,LSR #16+6+2
R14,R10,#&3000
R R11,R11,R14,LSR #6+4
R14,R10,#&30000000
R R11,R11,R14,LSR #16+6+6
R12,R4,#&FF
LDR R12,[R2,R12,LSL #2]
,LDR R14,[R7,R11,LSL #2]:ADDS R14,R14,R12
8MOVMI R14,#0:CMP R14,#F:MOVCS R14,#F:STR R14,[R9],#4
*LDR R14,[R6,R8,LSL #2]:ADD R14,R14,R12
,LDR R12,[R5,R11,LSL #2]:ADDS R14,R14,R12
8MOVMI R14,#0:CMP R14,#F:MOVCS R14,#F:STR R14,[R9],#4
R12,R4,#&FF
LDR R12,[R2,R12,LSL #2]
+LDR R14,[R3,R8,LSL #2]:ADDS R14,R12,R14
8MOVMI R14,#0:CMP R14,#F:MOVCS R14,#F:STR R14,[R9],#4
MOV R4,R4,LSR #16
R12,R4,#&FF
LDR R12,[R2,R12,LSL #2]
,LDR R14,[R7,R11,LSL #2]:ADDS R14,R14,R12
8MOVMI R14,#0:CMP R14,#F:MOVCS R14,#F:STR R14,[R9],#4
*LDR R14,[R6,R8,LSL #2]:ADD R14,R14,R12
,LDR R12,[R5,R11,LSL #2]:ADDS R14,R14,R12
8MOVMI R14,#0:CMP R14,#F:MOVCS R14,#F:STR R14,[R9],#4
R12,R4,#&FF
LDR R12,[R2,R12,LSL #2]
+LDR R14,[R3,R8,LSL #2]:ADDS R14,R12,R14
8MOVMI R14,#0:CMP R14,#F:MOVCS R14,#F:STR R14,[R9],#4
R12,R10,#&FF
LDR R12,[R2,R12,LSL #2]
,LDR R14,[R7,R11,LSL #2]:ADDS R14,R14,R12
8MOVMI R14,#0:CMP R14,#F:MOVCS R14,#F:STR R14,[R9],#4
*LDR R14,[R6,R8,LSL #2]:ADD R14,R14,R12
,LDR R12,[R5,R11,LSL #2]:ADDS R14,R14,R12
8MOVMI R14,#0:CMP R14,#F:MOVCS R14,#F:STR R14,[R9],#4
R12,R10,#&FF
LDR R12,[R2,R12,LSL #2]
+LDR R14,[R3,R8,LSL #2]:ADDS R14,R12,R14
8MOVMI R14,#0:CMP R14,#F:MOVCS R14,#F:STR R14,[R9],#4
MOV R10,R10,LSR #16
R12,R10,#&FF
LDR R12,[R2,R12,LSL #2]
,LDR R14,[R7,R11,LSL #2]:ADDS R14,R14,R12
8MOVMI R14,#0:CMP R14,#F:MOVCS R14,#F:STR R14,[R9],#4
*LDR R14,[R6,R8,LSL #2]:ADD R14,R14,R12
,LDR R12,[R5,R11,LSL #2]:ADDS R14,R14,R12
8MOVMI R14,#0:CMP R14,#F:MOVCS R14,#F:STR R14,[R9],#4
R12,R10,#&FF
LDR R12,[R2,R12,LSL #2]
+LDR R14,[R3,R8,LSL #2]:ADDS R14,R12,R14
8MOVMI R14,#0:CMP R14,#F:MOVCS R14,#F:STR R14,[R9],#4
SUBS R0,R0,#4:BNE mappixlp
LDMFD SP !,{PC}^
[OPT Z
.mappix%
LDR R0,sxloc
LDR R1,[R9]:LDR R1,[R1]
LDR R2,[R9,#1*8]
LDR R3,[R9,#2*8]
LDR R4,[R9,#3*8]
LDR R5,[R9,#4*8]
LDR R6,[R9,#5*8]
LDR R7,[R9,#6*8]
LDR R8,[R9,#7*8]
LDR R9,[R9,#8*8]
STMFD SP !,{R14}
.mappixlp
LDR R10,[R1],#4
R11,R10,#&FF00
LDR R11,[R2,R11,LSR #6]
R12,R10,#&FF:LDR R12,[R7,R12,LSL #2]:ADD R14,R12,R11
R12,R10,#&FF0000:LDR R12,[R8,R12,LSR #14]:ADDS R14,R14,R12
8MOVMI R14,#0:CMP R14,#F:MOVCS R14,#F:STR R14,[R9],#4
R12,R10,#&FF:LDR R12,[R5,R12,LSL #2]:ADD R14,R12,R11
R12,R10,#&FF0000:LDR R12,[R6,R12,LSR #14]:ADDS R14,R14,R12
8MOVMI R14,#0:CMP R14,#F:MOVCS R14,#F:STR R14,[R9],#4
R12,R10,#&FF:LDR R12,[R3,R12,LSL #2]:ADD R14,R12,R11
R12,R10,#&FF0000:LDR R12,[R4,R12,LSR #14]:ADDS R14,R14,R12
8MOVMI R14,#0:CMP R14,#F:MOVCS R14,#F:STR R14,[R9],#4
R11,R10,#&FF000000
LDR R11,[R2,R11,LSR #22]
R12,R10,#&FF:LDR R12,[R7,R12,LSL #2]:ADD R14,R12,R11
R12,R10,#&FF0000:LDR R12,[R8,R12,LSR #14]:ADDS R14,R14,R12
8MOVMI R14,#0:CMP R14,#F:MOVCS R14,#F:STR R14,[R9],#4
R12,R10,#&FF:LDR R12,[R5,R12,LSL #2]:ADD R14,R12,R11
R12,R10,#&FF0000:LDR R12,[R6,R12,LSR #14]:ADDS R14,R14,R12
"8MOVMI R14,#0:CMP R14,#F:MOVCS R14,#F:STR R14,[R9],#4
R12,R10,#&FF:LDR R12,[R3,R12,LSL #2]:ADD R14,R12,R11
R12,R10,#&FF0000:LDR R12,[R4,R12,LSR #14]:ADDS R14,R14,R12
%8MOVMI R14,#0:CMP R14,#F:MOVCS R14,#F:STR R14,[R9],#4
SUBS R0,R0,#2:BNE mappixlp
LDMFD SP !,{PC}^
[OPT Z
.mappix%
LDR R0,sxloc
LDR R1,[R9]:LDR R1,[R1]
LDR R2,[R9,#1*8]
LDR R3,[R9,#2*8]
LDR R5,[R9,#4*8]
LDR R6,[R9,#5*8]
LDR R7,[R9,#6*8]
LDR R9,[R9,#8*8]
STMFD SP !,{R14}
.mappixlp
LDR R10,[R1],#4
R11,R10,#&FF00
LDR R11,[R2,R11,LSR #6]
R12,R10,#&FF0000:LDR R12,[R7,R12,LSR #14]:ADDS R14,R12,R11
:8MOVMI R14,#0:CMP R14,#F:MOVCS R14,#F:STR R14,[R9],#4
R12,R10,#&FF:LDR R12,[R5,R12,LSL #2]:ADD R14,R12,R11
R12,R10,#&FF0000:LDR R12,[R6,R12,LSR #14]:ADDS R14,R14,R12
=8MOVMI R14,#0:CMP R14,#F:MOVCS R14,#F:STR R14,[R9],#4
R12,R10,#&FF:LDR R12,[R3,R12,LSL #2]:ADDS R14,R12,R11
?8MOVMI R14,#0:CMP R14,#F:MOVCS R14,#F:STR R14,[R9],#4
R11,R10,#&FF000000
LDR R11,[R2,R11,LSR #22]
R12,R10,#&FF0000:LDR R12,[R7,R12,LSR #14]:ADDS R14,R12,R11
C8MOVMI R14,#0:CMP R14,#F:MOVCS R14,#F:STR R14,[R9],#4
R12,R10,#&FF:LDR R12,[R5,R12,LSL #2]:ADD R14,R12,R11
R12,R10,#&FF0000:LDR R12,[R6,R12,LSR #14]:ADDS R14,R14,R12
F8MOVMI R14,#0:CMP R14,#F:MOVCS R14,#F:STR R14,[R9],#4
R12,R10,#&FF:LDR R12,[R3,R12,LSL #2]:ADDS R14,R12,R11
H8MOVMI R14,#0:CMP R14,#F:MOVCS R14,#F:STR R14,[R9],#4
SUBS R0,R0,#2:BNE mappixlp
LDMFD SP !,{PC}^
[OPT Z
.mappix%
LDR R0,sxloc
LDR R1,[R9]:LDR R1,[R1]
LDR R2,[R9,#1*8]
LDR R3,[R9,#2*8]
LDR R5,[R9,#4*8]
LDR R6,[R9,#5*8]
LDR R7,[R9,#6*8]
LDR R9,[R9,#8*8]
STMFD SP !,{R14}
.mappixlp
LDR R10,[R1],#2
R11,R10,#ymax%
LDR R11,[R2,R11,LSL #2]
R8,R10,#((1<<vbits%)-1)<<(ybits%+ubits%)
R10,R10,#((1<<ubits%)-1)<<ybits%
^9LDR R12,[R7,R8,LSR #ybits%+ubits%-2]:ADDS R14,R12,R11
_8MOVMI R14,#0:CMP R14,#F:MOVCS R14,#F:STR R14,[R9],#4
`8LDR R12,[R5,R8,LSR #ybits%+ubits%-2]:ADD R14,R12,R11
a3LDR R12,[R6,R10,LSR #ybits%-2]:ADDS R14,R14,R12
b8MOVMI R14,#0:CMP R14,#F:MOVCS R14,#F:STR R14,[R9],#4
c3LDR R12,[R3,R10,LSR #ybits%-2]:ADDS R14,R12,R11
d8MOVMI R14,#0:CMP R14,#F:MOVCS R14,#F:STR R14,[R9],#4
SUBS R0,R0,#1:BNE mappixlp
LDMFD SP !,{PC}^
xmul%=2
xdiv%=1
[OPT Z
.xsample%
LDR R0,[R9]:LDR R0,[R0]
LDR R1,[R9,#8]
LDR R2,[R9,#2*8]
SUBS R0,R0,#2
BEQ xdonediv
BMI xdonediv
.xsamplelp
s!LDMIA R1,{R5,R6,R7,R8,R9,R10}
ADD R8,R8,R5
MOV R8,R8,LSR #1
ADD R9,R9,R6
MOV R9,R9,LSR #1
ADD R10,R10,R7
MOV R10,R10,LSR #1
z"STMIA R2!,{R5,R6,R7,R8,R9,R10}
ADD R1,R1,#12
SUBS R0,R0,#2:BGT xsamplelp
.xdonediv
LDMIA R1,{R5,R6,R7}
MOV R8,R5
MOV R9,R6
MOV R10,R7
"STMIA R2!,{R5,R6,R7,R8,R9,R10}
MOVS PC,R14
[OPT Z
.xsample%
LDR R0,[R9]:LDR R0,[R0]
LDR R1,[R9,#8]
LDR R2,[R9,#2*8]
LDR R3,[R9,#3*8]:LDR R3,[R3]
LDR R4,[R9,#4*8]:LDR R4,[R4]
MOV R11,R4
.xsamplelp
LDMIA R1,{R5,R6,R7}
-SUBS R11,R11,#1:
Q R11,R4:ADDEQ R1,R1,#12
SUBS R12,R3,#1
BEQ xdonediv
.xdivlp
CMP R12,R11
BCC xdivlp2
MLDMIA R1!,{R8,R9,R10}:MLA R5,R8,R11,R5:MLA R6,R9,R11,R6:MLA R7,R10,R11,R7
SUBS R12,R12,R11:MOV R11,R4
BNE xdivlp
B xdonediv
.xdivlp2
LDMIA R1,{R8,R9,R10}
-SUBS R11,R11,#1:
Q R11,R4:ADDEQ R1,R1,#12
+ADD R5,R5,R8:ADD R6,R6,R9:ADD R7,R7,R10
SUBS R12,R12,#1:BNE xdivlp
.xdonediv
STMIA R2!,{R5,R6,R7}
SUBS R0,R0,#1:BPL xsamplelp
MOVS PC,R14
compression=5
[OPT Z
.firstcode DCD 0
.oldcode DCD 0
.codesize DCD setcodes%+1
.stack DCD stk%
.sp DCD stk%
.maxcode DCD clearcode%+2
!.maxcodesize DCD 2*clearcode%
.LZWdecode%
@LDR R2,firstcode:LDR R3,oldcode:LDR R4,stack:LDR R5,codesize
/LDR R6,sp:LDR R7,maxcode:LDR R8,maxcodesize
LDR R10,[R9]:LDR R10,[R10]
!LDR R11,[R9,#8]:LDR R11,[R11]
LDR R12,[R9,#24]
STMFD SP !,{R14}
.lzwloop
CMP R6,R4
BHI lzwunstack
.lzwengine
BL getcode
CMP R0,#clearcode%
BEQ lzwclear
MOV R1,R0
CMP R0,R7
STRCSB R2,[R6],#1
MOVCS R0,R3
CMP R0,#clearcode%
BCC lzwdonepush
.lzwpushtable
LDR R14,[R12,R0,LSL #2]
STRB R14,[R6],#1
MOV R0,R14,LSR #16
CMP R0,#clearcode%
BCS lzwpushtable
.lzwdonepush
LDR R2,[R12,R0,LSL #2]
BIC R2,R2,#&FF0000
BIC R2,R2,#&FF000000
STRB R2,[R6],#1
CMP R7,#4096
BCS lzwnocode
R R0,R2,R3,LSL #16
STR R0,[R12,R7,LSL #2]
ADD R7,R7,#1
CMP R7,R8
BCC lzwnocode
CMP R8,#4096
ADDCC R5,R5,#1
MOVCC R8,R8,LSL #1
flag=1500
[OPT Z
RCC R8,R8,#1
[OPT Z
.lzwnocode
MOV R3,R1
CMP R6,R4
BLS lzwengine
.lzwunstack
LDRB R0,[R6,#-1]!
.lzwloopend
STRB R0,[R11],#1
SUBS R10,R10,#1
BNE lzwloop
3STR R2,firstcode:STR R3,oldcode:STR R5,codesize
/STR R6,sp:STR R7,maxcode:STR R8,maxcodesize
LDMFD SP !,{PC}^
.lzwclear
MOV R0,#0
MOV R3,R12
.lzwdefaulttable
STR R0,[R3],#4
#ADD R0,R0,#1:CMP R0,#clearcode%
BCC lzwdefaulttable
MOV R5,#setcodes%+1
MOV R7,#clearcode%
MOV R8,R7,LSL #1
flag=1500
[OPT Z
SUB R8,R8,#1
[OPT Z
ADD R7,R7,#2
BL getcode
MOV R2,R0
MOV R3,R0
MOV R6,R4
B lzwloopend
.curbit DCD 0
.lastbit DCD 0
.buf DCD buf%
.getcode
STMFD SP !,{R6,R7,R8}
ADR R6,curbit
LDMIA R6,{R6,R7,R8}
ADD R1,R5,R6
CMP R1,R7
BCS needmoredata
.simplecode
ADD R7,R8,R6,LSR #3
BIC R7,R7,#3
LDMIA R7,{R0,R7}
flag=1500
[OPT Z
R1,R0,R0,ROR #16
BIC R1,R1,#&FF0000
MOV R0,R0,ROR #8
R0,R0,R1,LSR #8
R1,R7,R7,ROR #16
BIC R1,R1,#&FF0000
MOV R7,R7,ROR #8
R7,R7,R1,LSR #8
S R1,R6,#31:MOVNE R0,R0,LSL R1:RSBNE R1,R1,#32:
RNE R0,R0,R7,LSR R1
RSB R1,R5,#32
MOV R0,R0,LSR R1
[OPT Z
S R1,R6,#31:MOVNE R0,R0,LSR R1:RSBNE R1,R1,#32:
RNE R0,R0,R7,LSL R1
#!MVN R1,#0:BIC R0,R0,R1,LSL R5
[OPT Z
ADD R6,R6,R5
STR R6,curbit
LDMFD SP !,{R6,R7,R8}
MOV PC,R14
.needmoredata
STMFD SP !,{R2,R3,R4,R14}
MOV R3,R7,LSR #3
SUB R0,R3,#2
LDRB R0,[R8,R0]
STRB R0,[R8]
SUB R0,R3,#1
LDRB R0,[R8,R0]
STRB R0,[R8,#1]
LDR R1,[R9,#16]
LDR R1,[R1]
flag=1500
[OPT Z
MOV R0,#256
MOV R3,#256
[OPT Z
BL bytefromcache%
MOVS R3,R0
BEQ simplecode1
[OPT Z
SUB R6,R6,R7
ADD R6,R6,#16
ADD R0,R0,#2
MOV R7,R0,LSL #3
STR R7,lastbit
ADD R2,R8,#2
BL multibytefromcache%
.simplecode1
LDMFD SP !,{R2,R3,R4,R14}
B simplecode
range%
[OPT Z
.maxmin%
LDR R0,[R9]:LDR R0,[R0]
LDR R1,[R9,#8]
LDR R2,min
LDR R3,max
.maxminlp
LDR R4,[R1],#4
CMP R4,R3:MOVCS R3,R4
CMP R4,R2:MOVCC R2,R4
SUBS R0,R0,#1:BNE maxminlp
STR R2,min
STR R3,max
MOVS PC,R14
.min DCD F
.max DCD 0
sharpen%
d"sharp=(col+1)*4:
sharpen%>0
sharpen%<>8 sharpmul%=F/(sharpen%-8)
sharpmul%=F/(8-sharpen%)
[OPT Z
.sharp%
LDR R0,[R9]:LDR R0,[R0]
LDR R1,[R9,#8]
LDR R2,[R9,#16]
LDR R3,[R9,#24]
LDR R4,[R9,#32]
sharpen%
8,9,12,16,24
[OPT Z
MOV R8,#sharpmul%
R R8,R8,#sharpmul%
&FF00
x#MOV R9,#(sharpmul% >> 16)
R R9,R9,#(sharpmul% >> 16)
&FF00
[OPT Z
.sharplp
LDR R5,[R1,#-sharp]
#LDR R6,[R1,#sharp]:ADD R5,R5,R6
LDR R6,[R1],#4:ADD R5,R5,R6
$LDR R6,[R3,#-sharp]:ADD R5,R5,R6
#LDR R6,[R3,#sharp]:ADD R5,R5,R6
LDR R6,[R3],#4:ADD R5,R5,R6
$LDR R6,[R2,#-sharp]:ADD R5,R5,R6
#LDR R6,[R2,#sharp]:ADD R5,R5,R6
LDR R6,[R2],#4
MOV R6,R6,LSR #1
MOV R7,#
sharpen%
MUL R7,R6,R7
sharpen%>0
[OPT Z
SUBS R5,R7,R5,LSR #1
MOVCC R5,#0
[OPT Z
ADD R5,R7,R5,LSR #1
sharpen%
[OPT Z
MOV R6,R5,LSL #1
[OPT Z
MOV R6,R5
[OPT Z
MOV R6,R5,LSR #1
[OPT Z
MOV R6,R5,LSR #2
-8,24
[OPT Z
MOV R6,R5,LSR #3
[OPT Z
MOV R6,R5,LSR #16
R5,R5,R6,LSL #16
MUL R7,R8,R5
MUL R5,R9,R5
MUL R10,R6,R8
MUL R6,R9,R6
ADDS R10,R5,R10
ADDCS R6,R6,#&10000
ADDS R7,R7,R10,LSL #16
ADC R6,R6,R10,LSR #16
MOV R6,R6,LSL #(32-27)
RS R6,R6,R7,LSR #27
ADDCS R6,R6,#1
sharpen%>0
[OPT Z
CMP R6,#F:MOVCS R6,#F
[OPT Z
STR R6,[R4],#4
SUBS R0,R0,#1
BNE sharplp
MOVS PC,R14
hist%
equal%
[OPT Z
.histo%
LDR R0,[R9]:LDR R0,[R0]
LDR R1,[R9,#8]
LDR R2,[R9,#16]
.histlp
(LDR R3,[R2],#4:CMP R3,#F:MOVCS R3,#F
MOV R3,R3,LSR #bits-8
col=2
[OPT Z
ADD R3,R3,R3,LSL #1
<LDR R4,[R1,R3,LSL #2]:ADD R4,R4,#1:STR R4,[R1,R3,LSL #2]
(LDR R3,[R2],#4:CMP R3,#F:MOVCS R3,#F
MOV R3,R3,LSR #bits-8
$ADD R3,R3,R3,LSL #1:ADD R3,R3,#1
<LDR R4,[R1,R3,LSL #2]:ADD R4,R4,#1:STR R4,[R1,R3,LSL #2]
(LDR R3,[R2],#4:CMP R3,#F:MOVCS R3,#F
MOV R3,R3,LSR #bits-8
$ADD R3,R3,R3,LSL #1:ADD R3,R3,#2
[OPT Z
<LDR R4,[R1,R3,LSL #2]:ADD R4,R4,#1:STR R4,[R1,R3,LSL #2]
SUBS R0,R0,#1
BNE histlp
MOVS PC,R14
equal%
[OPT Z
.histequal%
LDR R0,[R9]:LDR R0,[R0]
LDR R1,[R9,#8]
LDR R2,[R9,#16]
.equallp
%LDR R3,[R2]:CMP R3,#F:MOVCS R3,#F
MOV R3,R3,LSR #bits-8
col=2
[OPT Z
%LDR R3,[R2]:CMP R3,#F:MOVCS R3,#F
MOV R3,R3,LSR #bits-8
ADD R3,R3,R3,LSL #1
(LDR R4,[R1,R3,LSL #2]:STR R4,[R2],#4
%LDR R3,[R2]:CMP R3,#F:MOVCS R3,#F
MOV R3,R3,LSR #bits-8
$ADD R3,R3,R3,LSL #1:ADD R3,R3,#1
(LDR R4,[R1,R3,LSL #2]:STR R4,[R2],#4
%LDR R3,[R2]:CMP R3,#F:MOVCS R3,#F
MOV R3,R3,LSR #bits-8
$ADD R3,R3,R3,LSL #1:ADD R3,R3,#2
[OPT Z
(LDR R4,[R1,R3,LSL #2]:STR R4,[R2],#4
SUBS R0,R0,#1
BNE equallp
MOVS PC,R14
"FN800","FN801","FN1000","FN1001"
[OPT Z
.rlexpand%
LDR R0,[R9]
LDR R1,[R0]
LDR R2,[R9,#8]:LDR R2,[R2]
LDR R3,[R9,#16]
LDR R4,[R3]
CMP R4,#1:MOVLTS PC,R14
LDR R5,[R9,#24]:LDR R5,[R5]
STRB R2,[R1],#1
SUB R4,R4,#1
CMP R1,R5
TEQNE R4,#0
BNE rle
.rlexit
STR R1,[R0]
STR R4,[R3]
MOVS PC,R14
"FN902"
[OPT Z
.unpack%
LDR R0,[R9]
LDR R0,[R0]
LDR R1,plbuff
ADD R2,R0,#768
.unpackloop
LDR R3,[R0],#4
MOV R5,#0
.bitloop
MOV R6,R3,LSR R5
R6,R6,#15
ADD R5,R5,#4
MOV R7,R3,LSR R5
R7,R7,#15
ADD R5,R5,#4
STRB R7,[R1],#1
STRB R6,[R1],#1
CMP R5,#32
BNE bitloop
CMP R2,R0
BNE unpackloop
MOV PC,R14
.plbuff EQUD plbuff%
"FN1601","FN1501","FN1850","FN1851"
[OPT Z
.readiff%
MOV R1,#c%
LDR R8,[R9]:LDR R8,[R8]
:+LDR R7,[R9,#8]:LDR R7,[R7]:ADD R7,R7,R8
STMFD SP !,{R14}
r$="FN1850"
r$="FN1851"
[OPT Z
BL bytefromcache%
sy%>250
[OPT Z
BL bytefromcache%
[OPT Z
BL bytefromcache%
CMP R0,#128
BCC rle1
RSB R2,R0,#256
BL bytefromcache%
.rle0 STRB R0,[R8],#1
SUBS R2,R2,#1
BPL rle0
B rle2
R .rle1
ADD R3,R0,#1
MOV R2,R8
ADD R8,R8,R3
BL multibytefromcache%
W .rle2
CMP R8,R7
BCC rle
LDMFD SP !,{R14}
MOVS PC,R14
"FN1900","FN1100","FN400"
[OPT Z
.readline%
LDR R2,[R9]:LDR R2,[R2]
LDR R3,[R9,#8]
LDR R0,[R3]
LDR R4,[R9,#16]
LDR R5,[R4]
e,LDR R6,[R9,#24]:LDR R6,[R6]:ADD R6,R6,R2
STMFD SP !,{R14}
CMP R5,#1
BGE rle1
BL bytefromcache%
MOV R5,#1
flag=1900
[OPT Z
CMP R0,#192
CS R5,R0,#63:BLCS bytefromcache%
flag=1100
[OPT Z
CMP R0,#128
BNE rle1
BL bytefromcache%
TEQ R0,#0
Q R0,#128
BEQ rle1
ADD R5,R0,#1
BL bytefromcache%
flag=400
[OPT Z
MOV R1,R0
BL bytefromcache%
R R1,R1,R0,LSL #8
BL bytefromcache%
R R1,R1,R0,LSL #16
BL bytefromcache%
ADD R5,R0,#1
MOV R0,R1
flag=200
[OPT Z
ADD R5,R0,#1
BL bytefromcache%
[OPT Z
.rle1
STRB R0,[R2],#1
flag=400
[OPT Z
MOV R1,R0,LSR #8
STRB R1,[R2],#1
MOV R1,R0,LSR #16
STRB R1,[R2],#1
[OPT Z
SUB R5,R5,#1
TEQ R2,R6
BNE rle
.rlexit
STR R0,[R3]:STR R5,[R4]
LDMFD SP !,{PC}^
"FN2401"
[OPT Z
.bm_rle8
MOV R1,#c%
LDR R8,[R9]:LDR R8,[R8]
+LDR R7,[R9,#8]:LDR R7,[R7]:ADD R7,R7,R8
STMFD SP !,{R14}
BL bytefromcache%
TEQ r0,#0
BEQ rlecopy
MOV r4,r0
BL bytefromcache%
.rle1
STRB r0,[r8],#1
SUBS r4,r4,#1
BGT rle1
B rle
.rlecopy
BL bytefromcache%
CMP r0,#3
BLT rlespecial
MOV r4,r0
.rle2
BL bytefromcache%
STRB r0,[r8],#1
BL bytefromcache%
SUBS r4,r4,#1
STRGTB r0,[r8],#1
SUBGTS r4,r4,#1
BGT rle2
B rle
.rlespecial
LDMFD SP !,{R14}
MOVS PC,R14
"FN2402"
[OPT Z
.bm_rle4
MOV R1,#c%
LDR R8,[R9]:LDR R8,[R8]
+LDR R7,[R9,#8]:LDR R7,[R7]:ADD R7,R7,R8
STMFD SP !,{R14}
MOV r2,#0
MOV r3,#0
BL bytefromcache%
TEQ r0,#0
BEQ rlecopy
MOV r4,r0
BL bytefromcache%
.rle1
BL bmrle4_insert
CMP r3,#8
MOVGE r5,r2,LSR#24
STRGEB r5,[r8],#1
MOVGE r2,r2,LSL#8
SUBGE r3,r3,#8
CMP r4,#0
BGT rle1
B rle
.rlecopy
BL bytefromcache%
CMP r0,#3
BLT rlespecial
MOV r4,r0
.rle2
BL bytefromcache%
BL bmrle4_insert
BL bytefromcache%
CMP r4,#0
BLGT bmrle4_insert
B rle4
.rle3
MOV r5,r2,LSR#24
STRB r5,[r8],#1
MOV r2,r2,LSL#8
SUB r3,r3,#8
.rle4
CMP r3,#8
BGE rle3
CMP r4,#0
BGT rle2
B rle
.rlespecial
CMP r3,#0
MOVGT r5,r2,LSR#24
STRGTB r5,[r8],#1
LDMFD SP !,{R14}
MOVS PC,R14
.bmrle4_insert
RSB r5,r3,#32
MOV r2,r2,LSR r5
MOV r2,r2,LSL r5
SUB r5,r5,#8
R r2,r2,r0,LSL r5
SUBS r4,r4,#2
ADDMI r3,r3,#4
ADDPL r3,r3,#8
MOVS PC,R14
cachebytes%
[OPT Z
.bytefromcache%
STMFD SP !,{R1,R2}
LDR R1,incacheptr
LDR R2,numlefttogo
LDRB R0,[R1],#1
SUBS R2,R2,#1
STRNE R1,incacheptr
STRNE R2,numlefttogo
LDMFD SP !,{R1,R2}
MOVNE PC,R14
STMFD SP !,{R0,R1,R2,R3,R4}
LDR R2,valdatacache
STR R2,incacheptr
LDR R3,valcache
STR R3,numlefttogo
MOV R0,#4
MOV R1,#c%
SWI "OS_GBPB"
LDMFD SP !,{R0,R1,R2,R3,R4}
MOV PC,R14
! .valdatacache DCD datacache%
.valcache DCD cache%
.incacheptr DCD datacache%
.numlefttogo DCD cache%
.multibytefromcache%
CMP R3,#0
Q PC,R14
STMFD SP !,{R0,R14}
.multibytefromcachel
BL bytefromcache%
STRB R0,[R2],#1
SUBS R3,R3,#1
BNE multibytefromcachel
LDMFD SP !,{R0,R14}
MOV PC,R14
planar%<0
C%=7:
flag=2600 C%=15
[OPT Z
.plancnv%
LDR R0,sxloc
LDR R1,[R9]:LDR R1,[R1]
LDR R3,[R9,#8]:LDR R3,[R3]
LDR R4,[R9,#16]:LDR R4,[R4]
flag=3500
[OPT Z
MOV R9,#0
[OPT Z
MOV R9,#C%
[OPT Z
.planelp
MOV R7,#0
MOV R5,R3
N%=1
planes%
[OPT Z
LDR R6,[R5],R4
flag=2600
[OPT Z
MOV R6,R6,LSL #8
BIC R6,R6,#&FF000000
R R6,R6,R6,LSR #16
flag=3500
[OPT Z
MOV R6,R6,LSR R9
S R6,R6,#1
R R7,R7,R6,LSL #(planes%-N%)
RNE R7,R7,#(planes%-1)
[OPT Z
MOV R6,R6,LSR R9
R6,R6,#1
R R7,R7,R6,LSL #(N%-1)
[OPT Z
STRB R7,[R1],#1
flag=3500
[OPT Z
ADD R9,R9,#1
CMP R9,#C%+1
Q R9,#0
[OPT Z
SUBS R9,R9,#1:MOVMI R9,#C%
flag
2600
[OPT Z
MOVMI R3,R5
3500
[OPT Z
ADDEQ R3,R3,#1
[OPT Z
ADDMI R3,R3,#1
[OPT Z
SUBS R0,R0,#1:BNE planelp
MOVS PC,R14
cputime%=
cache%
flag=3600
Epcdblk%!12=cacherows%:
refillpcd:
cache%>=filesize% rowstogo%=-1
striprows%>0
compression>1
12,4,c%,datacache%,cache%
cachebytes% !incacheptr=datacache%:!numlefttogo=cache%
refill:
cache%>=filesize% rowstogo%=-1
sizeshft%=0:
ncol
2^24-1:size%=1
2^15-1:size%=1
63,255,256:size%=1
15:size%=2:sizeshft%=1
3:size%=4:sizeshft%=2
1:size%=8:sizeshft%=3:
m$="C" size%=2:sizeshft%=1
m$="D" size%=4:sizeshft%=2
m$="T" size%=2:sizeshft%=1
flag
501:
info%
"Reading interlaced GIF"
%sz%=sx%*sy%:plbuff%=
dim(sz%+100)
Y%=0
sy%-1
8:X%=plbuff%+Y%*sx%:
LZWdecode%,table%(0),c%,X%,sx%:
Y%=4
sy%-1
8:X%=plbuff%+Y%*sx%:
LZWdecode%,table%(0),c%,X%,sx%:
Y%=2
sy%-1
4:X%=plbuff%+Y%*sx%:
LZWdecode%,table%(0),c%,X%,sx%:
Y%=1
sy%-1
2:X%=plbuff%+Y%*sx%:
LZWdecode%,table%(0),c%,X%,sx%:
?datacache%=plbuff%:buff%=plbuff%:rowbytes%=sx%:rowstogo%=-1
gamma<>1
gamma<>0
k=1/gamma:
C%=0
colourindex
r%(C%) r%(C%)=((r%(C%)/F)^k)*F
g%(C%) g%(C%)=((g%(C%)/F)^k)*F
b%(C%) b%(C%)=((b%(C%)/F)^k)*F
rmax=F:gmax=F:bmax=F
col=0
input<9
C%=0
255:r%(C%)=r%(C%)*rwt+g%(C%)*gwt+b%(C%)*bwt:
input<400
$rmax=F*rwt:gmax=F*gwt:bmax=F*bwt
C%=0
colourindex:r%(C%)=r%(C%)*rwt:g%(C%)=g%(C%)*gwt:b%(C%)=b%(C%)*bwt:
order%
adjustpalette(1/ydiv%/xdiv%,0)
range%
info%
"Scanning data to compute parameters for '-range'"
order%
Y%=0:
hour%,Y%*100
(r$+"(xp%())"):
maxmin%,xp%(1,0),totvals2%:Y%+=1
Y%=sy%
!min<255
!max+255>=F
'Y%=0:ysamp%=1:
hour%,Y%*100
scaledpixelrow(cl%()):
maxmin%,cl%(1,0),totvals%:Y%+=1
Y%=y%
!min<255
!max+255>=F
!max+255>=F
!min<255 range%=
:range$="No point in '-range' on this image"
range%
adjustpalette(F/(!max-!min),!min/ydiv%/xdiv%):range$="Input image maximum "+
(!max/F*100)+"% minimum "+
(!min/F*100)+"%"
rewind:
info%
range$
hist%
equal%
equal%
info%
"Scanning data to compute parameters for '-equal'"
order%
yr%=0
sy%-1:
hour%,yr%*100
(r$+"(xp%())"):
histo%,xp%(1,0),vals%(0,0),sx%
.ysamp%=1:
yr%=0
y%-1:
hour%,yr%*100
scaledpixelrow(cl%()):
histo%,cl%(1,0),vals%(0,0),x%
info%
"Done. Now processing the picture"
input<400
C%=0
colourindex
r%(C%)<0 r%(C%)=0
g%(C%)<0 g%(C%)=0
b%(C%)<0 b%(C%)=0
r%(C%)>rmax r%(C%)=rmax
g%(C%)>gmax g%(C%)=gmax
b%(C%)>bmax b%(C%)=bmax
hist%
M%=0:ZM%=-1:
C%=0
Z%=0
vals%(Z%,C%)>M% M%=vals%(Z%,C%):ZM%=Z%
ZM%=-1
okinfo%=0
col>0
66:ht=500
<>66
16:ht=400
0,6,2000,6
18:ht=400:
0,6,1024,6
$M=M%/(ht*2-8):
C%=0
col>0
Z%=0
vals%(Z%,C%) X%=Z%*3+C%<<1:
X%,8,X%,vals%(Z%,C%)/M+8
Z%=0
vals%(Z%,C%) X%=Z%<<2:
X%,8,2,vals%(Z%,C%)/M
close:
"Hourglass_Off"
m>=0 oname$="p"+
m+m$
oname$=m$
m=-6
m=-7
m=-8 oname$=pnm$
range% oname$+="r"
equal% oname$+="e"
sharpen% oname$+="s"+
sharpen%
black% oname$+="b"+
black%
gamma<>1 A%=@%:@%=&1020100:oname$+="g"+
gamma:@%=A%
bright%=16 oname$+="b"
*xsp%=x%:ysp%=y%:
rotate%
xsp%,ysp%
rotate%
hflip%
vflip%
m=-9
m=-10
m-=2
m=-9
m=-10
jpq%(20)
[jpq%()=60,75,90,105,120,135,150,160,170,180,190,205,215,235,255,280,320,380,500,750,850
-1:xwords%=xsp%:sz%=xwords%*ysp%:Y%=ysp%
getoutput(sz%,0,xwords%,Y%):base%=ram%
-3,-5:xwords%=xsp%*2:sz%=xwords%*ysp%:Y%=ysp%
getoutput(sz%,0,xwords%,Y%):base%=ram%
-4:xwords%=xsp%*3:sz%=xwords%*ysp%:Y%=ysp%
getoutput(sz%,0,xwords%,Y%):base%=ram%
-6:xwords%=xsp%*2+3
3:sz%=xwords%*ysp%:Y%=ysp%
'A%=Y%:
getoutput(sz%,64,xwords%,Y%)
1ram%!4=0:ram%!8=16:ram%!12=16:
&2e,&109,ram%
&2e,&10f,ram%,oname$,0,xsp%*2,Y%,28
Jbase%=ram%+ram%!8:base%!(5*4)=A%-1:!base%=!base%-Y%*xwords%+A%*xwords%
)ram%!12=ram%!12-Y%*xwords%+A%*xwords%
>base%!(10*4)=5<<27
nx<<1
ny<<14
1:base%+=base%!(8*4)
-7:xwords%=xsp%*3+3
3:sz%=xwords%*ysp%:Y%=ysp%
'A%=Y%:
getoutput(sz%,64,xwords%,Y%)
1ram%!4=0:ram%!8=16:ram%!12=16:
&2e,&109,ram%
&2e,&10f,ram%,oname$,0,xsp%*3,Y%,28
Jbase%=ram%+ram%!8:base%!(5*4)=A%-1:!base%=!base%-Y%*xwords%+A%*xwords%
)ram%!12=ram%!12-Y%*xwords%+A%*xwords%
Bbase%!(10*4)=panic<<27
nx<<1
ny<<14
1:base%+=base%!(8*4)
4no magic number yet for new format 24bpp sprites
-8:xwords%=xsp%*4:sz%=xwords%*ysp%:Y%=ysp%
'A%=Y%:
getoutput(sz%,64,xwords%,Y%)
1ram%!4=0:ram%!8=16:ram%!12=16:
&2e,&109,ram%
&2e,&10f,ram%,oname$,0,xsp%*4,Y%,28
"Jbase%=ram%+ram%!8:base%!(5*4)=A%-1:!base%=!base%-Y%*xwords%+A%*xwords%
#)ram%!12=ram%!12-Y%*xwords%+A%*xwords%
$>base%!(10*4)=6<<27
nx<<1
ny<<14
1:base%+=base%!(8*4)
-9:xwords%=xsp%+3
3:sz%=(xsp%+7
7)*(ysp%+7
7):Y%=ysp%
&)sz%=sz%*jpq%(jpegquality%
5)/588+1024
'&jpegwrk%=
dim((xsp%+7
7)*9+20000)
base%=
dim(xwords%)
getoutputjp(sz%)
*N!ram%=xsp%:ram%!4=ysp%:ram%!8=jpegquality%:ram%!12=1:ram%!16=90:ram%!20=90
"CompressJPEG_Start",ram%,sz%,ram%,jpegwrk%,(xsp%+7
7)*9+20000
jpegtag%
-10:xwords%=xsp%*3+3
3:sz%=(xsp%+15
15)*(ysp%+15
15)*12/8:Y%=ysp%
-)sz%=sz%*jpq%(jpegquality%
5)/588+1024
.)jpegwrk%=
dim((xsp%+15
15)*30+20000)
base%=
dim(xwords%)
getoutputjp(sz%)
1N!ram%=xsp%:ram%!4=ysp%:ram%!8=jpegquality%:ram%!12=3:ram%!16=90:ram%!20=90
"CompressJPEG_Start",ram%,sz%,ram%,jpegwrk%,(xsp%+15
15)*30+20000
jpegtag%
-11:xwords%=xsp%:sz%=xwords%*ysp%+20000:Y%=ysp%
4&jpegwrk%=
dim((xsp%+7
7)*9+20000)
getoutput(sz%,0,xwords%,Y%):base%=ram%+20000
-12:xwords%=xsp%*3:sz%=xwords%*ysp%+20000:Y%=ysp%
7)jpegwrk%=
dim((xsp%+15
15)*30+20000)
getoutput(sz%,0,xwords%,Y%):base%=ram%+20000
:xwords%=xsp%/size%+3.9999
3:sz%=xwords%*ysp%:X%=xsp%:Y%=ysp%
ncol=1
"C":!rowinc=xwords%:xwords%=xwords%*4:sz%=xwords%*ysp%:X%=xsp%*4:Y%=ysp%*4
"T":!rowinc=xwords%:xwords%=xwords%*3:sz%=xwords%*ysp%:X%=xsp%*4:Y%=ysp%*3
"D":!rowinc=xwords%:xwords%=xwords%*2:sz%=xwords%*ysp%:X%=xsp%*2:Y%=ysp%*2
A,A%=Y%:
getoutput(sz%,2048+64,xwords%,Y%)
B1ram%!4=0:ram%!8=16:ram%!12=16:
&2e,&109,ram%
&2e,&10f,ram%,oname$,(ncol<63)
1,X%,Y%,spm
DJbase%=ram%+ram%!8:base%!(5*4)=A%-1:!base%=!base%-Y%*xwords%+A%*xwords%
E)ram%!12=ram%!12-Y%*xwords%+A%*xwords%
F&pal%=base%+11*4:base%+=base%!(8*4)
ncol
IR!(pal%-8)+=2048:!(pal%-12)+=2048:base%+=2048:!(ram%+12)+=2048:!(pal%-44)+=2048
Z%=0
255:B%=Z%
Z%<<8
Z%<<16:B%=B%<<8
K%pal%!(Z%*8)=B%:pal%!(Z%*8+4)=B%:
MR!(pal%-8)+=2048:!(pal%-12)+=2048:base%+=2048:!(ram%+12)+=2048:!(pal%-44)+=2048
Z%=0
255:B%=palette%!(Z%<<2)<<8
O%pal%!(Z%*8)=B%:pal%!(Z%*8+4)=B%:
Z%=0
col(Z%,palette%!(Z%<<2)
&F0F0F0):
Z%=0
7:A%=0:
1 A%+=&F0
2 A%+=&F000
4 A%+=&F00000
col(Z%,A%):
Z%=0
15:A%=Z%<<4:
col(Z%,A%
A%<<8
A%<<16):
Z%=0
15:A%=(Z%
7)/7*15+.2<<4:
col(Z%,A%
A%<<8
A%<<16):
col(0,0):
col(1,&F0F000):
col(2,&F000F0):
col(3,&F0F0)
Z%=0
col(Z%,palette%!(Z%<<2)
&F0F0F0):
Z%=0
3:A%=Z%*5<<4:
col(Z%,A%
A%<<8
A%<<16):
col(0,0):
col(1,&F0F0F0)
flex%
workspace%<0
m/P%=
:[OPT 0:STR r13,P%+16:MOVS Pc,r14:]:
+32*1024+
base%*size%>2^32
42,"base%*size% product too large"
Save:
$+" internal ("+
SYS"Hourglass_LEDs",3
v$ysamp%=1:nl%()=0:step%=4*(col+1)
wIaddr%=base%<<sizeshft%:rowstep%=xwords%*size%:colstep%=1:dist%=xsp%-1
m=-3
m=-6 dist%=dist%*2
m=-4
m=-10
m=-12 dist%=dist%*3
m=-8 dist%=dist%*4
rotate%
|6odist%=dist%:
colstep%,rowstep%:
hflip%,vflip%
rotate%=1
~Gaddr%+=(ysp%-1)*colstep%:colstep%=-colstep%:dist%=(ysp%-1)*colstep%
;addr%+=dist%:rowstep%=-rowstep%:dist%=(ysp%-1)*colstep%
m=-3
m=-6 colstep%=colstep%/2:rowstep%=rowstep%*2
m=-4
m=-10
m=-12 colstep%=colstep%/3:rowstep%=rowstep%*3
m=-8 colstep%=colstep%/4:rowstep%=rowstep%*4
hflip%
0addr%+=dist%:dist%=-dist%:colstep%=-colstep%
vflip%
rotate%
,addr%+=odist%*rotate%:rowstep%=-rowstep%
/addr%+=(ysp%-1)*rowstep%:rowstep%=-rowstep%
Soutlim%=((base%+xwords%*Y%)<<sizeshft%)-1:oddcolstep%=-colstep%:oddstep%=-step%
order%
adjustpalette(1/ydiv%/xdiv%,0)
m=-9
m=-10
"OS_SWINumberFromString",,"CompressJPEG_WriteLine"
sy%=y%
sx%=x%
range%=
sharpen%=
equal%=
dither%
yr%=0
y%-1:
hour%,yr%*100
(r$+"(cl%())"):cl%()=cl%()+nl%():nl%()=0:B%=x%
fs%,colstep%,cl%(1,0),nl%(1,0),addr%,step%,B%
GA%=addr%+dist%:
fs%,oddcolstep%,cl%(x%,0),nl%(x%,0),A%,oddstep%,B%
wl%,jpegtag%,addr%
KI%=step%:
yr%=0
y%-1:
hour%,yr%*100
addr%>outlim%
flushoutput
(r$+"(cl%())"):B%=x%:
fs%,colstep%,cl%(1,0),I%,addr%,I%,B%
wl%,jpegtag%,addr%
equal%
rewind:Havg%=
(vals%())/256/(col+1):
new%(256,col)
B%=0
col:R%=0:Hint%=0:
Z%=0
256:L%=R%:Hint%+=vals%(Z%,B%)
Hint%>Havg%:Hint%-=Havg%:R%+=1:
new%(Z%,B%)=(L%+R%)/2*F/256
sharpen%
order%
;yread%=sy%-1:W%=
(r$+"(rm1%())"):
equal%
fit2(rm1%())
B%=0
col:rm1%(0,B%)=rm1%(1,B%):rm1%(sx%+1,B%)=rm1%(sx%,B%):
=yread%=y%-1:
scaledpixelrow(rm1%()):
equal%
fit(rm1%())
B%=0
col:rm1%(0,B%)=rm1%(1,B%):rm1%(x%+1,B%)=rm1%(x%,B%):
rm2%()=rm1%()
order%
yr%=0
y%-1
hour%,yr%*100
addr%>outlim%
flushoutput
sy%=y%
sharppixelrow(cl%())
;ysamp%-=1:
ysamp%=0
sharppixelrow(xl%()):ysamp%=ymul%
ydiv%=1
cl%()=xl%()
ysamp%>=ydiv%
#ysamp%-=ydiv%:cl%()=xl%()*ydiv%
/cl%()=xl%()*ysamp%:Y%=ydiv%-ysamp%:ysamp%=0
ysamp%=0
sharppixelrow(xl%()):ysamp%=ymul%
ysamp%>Y%
6ysamp%-=Y%:xl2%()=xl%()*Y%:cl%()=cl%()+xl2%():Y%=0
>Y%-=ysamp%:xl2%()=xl%()*ysamp%:cl%()=cl%()+xl2%():ysamp%=0
Y%=0
ysamp%+=1
2cl%()=cl%()+nl%():nl%()=0:B%=x%:A%=addr%+dist%
fs%,colstep%,cl%(1,0),nl%(1,0),addr%,step%,B%
fs%,oddcolstep%,cl%(x%,0),nl%(x%,0),A%,oddstep%,B%
wl%,jpegtag%,addr%
yr%=0
y%-1
hour%,yr%*100
addr%>outlim%
flushoutput
sharpen%
yread% yread%-=1:
scaledpixelrow(rm%()):
equal%
fit(rm%())
B%=0
col:rm%(0,B%)=rm%(1,B%):rm%(x%+1,B%)=rm%(x%,B%):
sharp%,cl%(1,0),rm%(1,0),rm1%(1,0),rm2%(1,0),totvals%
rm2%(),rm1%():rm1%()=rm%()
scaledpixelrow(cl%()):
equal%
fit(cl%())
2cl%()=cl%()+nl%():nl%()=0:B%=x%:A%=addr%+dist%
fs%,colstep%,cl%(1,0),nl%(1,0),addr%,step%,B%
fs%,oddcolstep%,cl%(x%,0),nl%(x%,0),A%,oddstep%,B%
wl%,jpegtag%,addr%
"CompressJPEG_Finish",jpegtag%
jpegsize%
sy%=y%
sx%=x%
range%=
sharpen%=
equal%=
dither%
yr%=0
y%-1:
hour%,yr%*100
addr%>outlim%
flushoutput
(r$+"(cl%())"):cl%()=cl%()+nl%():nl%()=0:B%=x%:A%=addr%:addr%+=rowstep%
fs%,colstep%,cl%(1,0),nl%(1,0),A%,step%,B%
BA%+=dist%:
fs%,oddcolstep%,cl%(x%,0),nl%(x%,0),A%,oddstep%,B%
KI%=step%:
yr%=0
y%-1:
hour%,yr%*100
addr%>outlim%
flushoutput
(r$+"(cl%())"):B%=x%:A%=addr%:addr%+=rowstep%:
fs%,colstep%,cl%(1,0),I%,A%,I%,B%
equal%
rewind:Havg%=
(vals%())/256/(col+1):
new%(256,col)
B%=0
col:R%=0:Hint%=0:
Z%=0
256:L%=R%:Hint%+=vals%(Z%,B%)
Hint%>Havg%:Hint%-=Havg%:R%+=1:
new%(Z%,B%)=(L%+R%)/2*F/256
sharpen%
order%
;yread%=sy%-1:W%=
(r$+"(rm1%())"):
equal%
fit2(rm1%())
B%=0
col:rm1%(0,B%)=rm1%(1,B%):rm1%(sx%+1,B%)=rm1%(sx%,B%):
=yread%=y%-1:
scaledpixelrow(rm1%()):
equal%
fit(rm1%())
B%=0
col:rm1%(0,B%)=rm1%(1,B%):rm1%(x%+1,B%)=rm1%(x%,B%):
rm2%()=rm1%()
order%
yr%=0
y%-1
hour%,yr%*100
addr%>outlim%
flushoutput
sy%=y%
sharppixelrow(cl%())
;ysamp%-=1:
ysamp%=0
sharppixelrow(xl%()):ysamp%=ymul%
ydiv%=1
cl%()=xl%()
ysamp%>=ydiv%
#ysamp%-=ydiv%:cl%()=xl%()*ydiv%
/cl%()=xl%()*ysamp%:Y%=ydiv%-ysamp%:ysamp%=0
ysamp%=0
sharppixelrow(xl%()):ysamp%=ymul%
ysamp%>Y%
"6ysamp%-=Y%:xl2%()=xl%()*Y%:cl%()=cl%()+xl2%():Y%=0
$>Y%-=ysamp%:xl2%()=xl%()*ysamp%:cl%()=cl%()+xl2%():ysamp%=0
Y%=0
ysamp%+=1
+<cl%()=cl%()+nl%():nl%()=0:B%=x%:A%=addr%:addr%+=rowstep%
fs%,colstep%,cl%(1,0),nl%(1,0),A%,step%,B%
/BA%+=dist%:
fs%,oddcolstep%,cl%(x%,0),nl%(x%,0),A%,oddstep%,B%
yr%=0
y%-1
hour%,yr%*100
addr%>outlim%
flushoutput
sharpen%
yread% yread%-=1:
scaledpixelrow(rm%()):
equal%
fit(rm%())
B%=0
col:rm%(0,B%)=rm%(1,B%):rm%(x%+1,B%)=rm%(x%,B%):
sharp%,cl%(1,0),rm%(1,0),rm1%(1,0),rm2%(1,0),totvals%
rm2%(),rm1%():rm1%()=rm%()
scaledpixelrow(cl%()):
equal%
fit(cl%())
=<cl%()=cl%()+nl%():nl%()=0:B%=x%:A%=addr%:addr%+=rowstep%
fs%,colstep%,cl%(1,0),nl%(1,0),A%,step%,B%
ABA%+=dist%:
fs%,oddcolstep%,cl%(x%,0),nl%(x%,0),A%,oddstep%,B%
m=-11
m=-12
"OS_SWINumberFromString",,"CompressJPEG_WriteLine"
m=-11
IN!ram%=xsp%:ram%!4=ysp%:ram%!8=jpegquality%:ram%!12=1:ram%!16=90:ram%!20=90
"CompressJPEG_Start",ram%,sz%,ram%,jpegwrk%,(xsp%+7
7)*9+20000
jpegtag%
LN!ram%=xsp%:ram%!4=ysp%:ram%!8=jpegquality%:ram%!12=3:ram%!16=90:ram%!20=90
"CompressJPEG_Start",ram%,sz%,ram%,jpegwrk%,(xsp%+15
15)*30+20000
jpegtag%
addr%=ram%+20000
yr%=0
ysp%-1
hour%,yr%*100
ysp%:
wl%,jpegtag%,addr%:addr%+=xwords%
"CompressJPEG_Finish",jpegtag%
jpegsize%
cputime%=
-cputime%
srchdevlist
[OPT Z
[%CMP R4,#F:MOVCS R4,#0:MOVGE R4,#F
\>MOV R0,R4,LSR #(bits-k%):CMP R0,#1<<k%:MOVCS R0,#(1<<k%)-1
]%CMP R5,#F:MOVCS R5,#0:MOVGE R5,#F
^RMOV R3,R5,LSR #(bits-k%):CMP R3,#1<<k%:MOVCS R3,#(1<<k%)-1:
R R0,R0,R3,LSL #k%
_%CMP R6,#F:MOVCS R6,#0:MOVGE R6,#F
`TMOV R3,R6,LSR #(bits-k%):CMP R3,#1<<k%:MOVCS R3,#(1<<k%)-1:
R R0,R0,R3,LSL #k%*2
STMFD SP !,{R8,R9,R10,R11}
LDR r3,ictloc
LDR r2,[r3,r0,LSL #2]
MOV r14,r2,lsr #24
CMP r14,#4
ADDCC r2,r3,r0,lsl #2
BICCS r2,r2,#&ff000000
LDRB r0,[r2],#1
SUBS r14,r14,#1
BEQ gotit
ADD r3,r0,r0,lsl #1
ADD r3,r7,r3,lsl #2
LDMIA r3,{r8,r9,r10}
SUBS r8,r8,r4
RSBMI r8,r8,#0
MOV r8,r8,lsr #bits/2
SUBS r9,r9,r5
RSBMI r9,r9,#0
MOV r9,r9,lsr #bits/2
SUBS r10,r10,r6
RSBMI r10,r10,#0
MOV r10,r10,lsr #bits/2
MUL r3,r8,r8
MUL r11,r9,r9
ADD r11,r11,r11,LSL #2
ADD r3,r3,r3,LSL #1
ADD r3,r3,r11,LSL #1
MLA r11,r10,r10,r3
.srchlist
LDRB r3,[r2],#1
ADD R8,R3,R3,LSL #1
ADD R8,R7,R8,LSL #2
LDMIA R8,{R8,R9,R10}
SUBS R9,R5,R9
RSBMI R9,R9,#0
MOV R3,R9,LSR #bits/2
MUL R9,R3,R3
ADD r9,r9,r9,LSL #2
CMP R11,R9,LSL #1
BCC srchquick
SUBS R8,R4,R8
RSBMI R8,R8,#0
MOV R3,R8,LSR #bits/2
MUL R8,r3,r3
ADD r8,r8,r8,LSL #1
ADD r8,r8,r9,LSL #1
SUBS R10,R6,R10
RSBMI R10,R10,#0
MOV R3,R10,LSR #bits/2
MLA R10,R3,R3,R8
CMP R10,R11
MOVCC R11,R10
LDRCCB R0,[r2,#-1]
.srchquick
SUBS R14,R14,#1
BNE srchlist
.gotit
+ADD R3,R0,R0,LSL #1:ADD R3,R7,R3,LSL #2
LDMIA R3,{R8,R9,R10}
+SUB R4,R4,R8:SUB R5,R5,R9:SUB R6,R6,R10
LDMFD r13!,{R8,R9,R10,R11}
getoutput(A%,E%,B%,
A%>max%
rotate%=
vflip%=
3C%=max%
B%+1:A%=xwords%*C%+E%:first%=
A%+=E%
spritearea%<0
0ram%=
createarea(A%):
ram%=-1 ram%=
dim(A%)
ram%=spritearea%
!ram%=A%
getoutputjp(
spritearea%<0
4ram%=
createareajp(A%):
ram%=-1 ram%=
dimjp(A%)
ram%=spritearea%
!ram%=A%
createarea(size%)
areanumber%=0
&20066,0,-1,size%,-1,%10000000,size%,0,0,"ChangeFSI sprite"
,areanumber%,,areabase%;V%
areanumber%=0:=-1
"OS_ReadDynamicArea",areanumber%
,areasize%
areasize%<size%
removearea:
42,"Couldn't create area"
=areabase%
createareajp(
size%)
areanumber%=0
&20066,0,-1,size%,-1,%10000000,size%,0,0,"ChangeFSI JPEG"
,areanumber%,,areabase%;V%
areanumber%=0:=-1
"OS_ReadDynamicArea",areanumber%
,areasize%:size%=areasize%
=areabase%
removearea
areanumber%
"OS_DynamicArea",1,areanumber%:areanumber%=0
cachedim(size%)
cacheareanumber%=0
&20066,0,-1,size%,-1,%10000000,size%,0,0,"ChangeFSI cache"
,cacheareanumber%,,cacheareabase%;V%
cacheareanumber%=0:=-1
"OS_ReadDynamicArea",cacheareanumber%
,cacheareasize%
cacheareasize%<size%
removecachearea:
42,"Couldn't create area"
=cacheareabase%
removecachearea
cacheareanumber%
"OS_DynamicArea",1,cacheareanumber%:cacheareanumber%=0
flushoutput
spritearea%<0
oksave%
(A%=base%:
first% A%=ram%+4:first%=
12,2,o%,A%,addr%
size%-A%
addr%=base%*size%
close
flag=3600
"PhotoCD_Close",pcdh%,1
#c%:c%=0:
scrapf% scrapf%=
"Remove <wimp$scrap2>"
cc%
#cc%:cc%=0
ccc%
#ccc%:ccc%=0
removecachearea
close
spritearea%<0
oksave%
flushoutput
"OS_File",10,f$,&004,,ram%,ram%+sz%
-2:o%=
#o%,pnm$
pnm$
"P1"
#o%,"# "+f$+".pbm (options "+oname$+")"
xsp%+" "+
ysp%
Y%=0
ysp%-1:B%=base%+Y%*xwords%
X%=0
xsp%-1:
B%?(X%>>3)
(1<<(X%
#o%,"1";
#o%,"0";
#o%,""
"P4"
#o%,"# "+f$+".pbm (options "+oname$+") binary encoded"
xsp%+" "+
ysp%
X%=0
255:code%?X%=X%<<7
X%<<5
X%<<3
X%<<1
X%>>1
X%>>3
X%>>5
X%>>7:
Y%=0
ysp%-1:B%=base%+Y%*xwords%
X%=0
xsp%-1
#o%,code%?(B%?(X%>>3)):
"P2"
#o%,"# "+f$+".pgm (options "+oname$+")"
xsp%+" "+
ysp%
#o%,"15"
Y%=0
ysp%-1:B%=base%+Y%*xwords%
X%=0
xsp%-1:C%=B%?(X%>>1):
1 C%=C%>>4
C%=C%
#o%," "+
#o%,""
"P5"
#o%,"# "+f$+".pgm (options "+oname$+") binary encoded"
xsp%+" "+
ysp%
#o%,"15"
Y%=0
ysp%-1:B%=base%+Y%*xwords%
X%=0
xsp%-1:C%=B%?(X%>>1):
1 C%=C%>>4
C%=C%
#o%,C%
#o%:o%=0
pnm$="P2"
pnm$="P1"
"Settype "+f$+" &FFF"
-3:o%=
#o%,pnm$
#o%,"# "+f$+".pcm (options "+oname$+") binary encoded 15bpp (5bits r,g,b)"
xsp%+" "+
ysp%
#o%,"31"
12,2,o%,ram%,xsp%*ysp%*2
#o%:o%=0
-4:o%=
pnm$="IRLAM"
#o%,"Irlam 24: "+
xsp%+" "+
ysp%
Y%=0
ysp%-1:B%=ram%+Y%*xwords%
X%=0
xsp%*3-1
#o%,B%?X%:
(B%+=1:
X%=0
xsp%*3-1
#o%,B%?X%:
(B%+=1:
X%=0
xsp%*3-1
#o%,B%?X%:
#o%,pnm$
pnm$="P6"
#o%,"# "+f$+".ppm (options "+oname$+") binary encoded 24bpp r,g,b"
#o%,"# "+f$+".ppm (options "+oname$+") "+
(p6bits*3)+"bpp r,g,b"
xsp%+" "+
ysp%
(2^p6bits-1)
pnm$="P6"
12,2,o%,ram%,xsp%*ysp%*3
Y%=0
ysp%-1:B%=ram%+Y%*xwords%
X%=0
xsp%-1:C%=B%!(X%*3):
#o%," "+
255)+" "+
((C%>>8)
&FF)+" "+
((C%>>16)
255);
#o%,""
#o%:o%=0
pnm$="P3"
"Settype "+f$+" &FFF"
-5:o%=
#o%,pnm$
#o%,"# "+f$+".pcm (options "+oname$+") binary encoded 15bpp (5bits y,u,v)"
xsp%+" "+
ysp%
#o%,"31 27 21"
12,2,o%,ram%,xsp%*ysp%*2
#o%:o%=0
-9,-10,-11,-12
spritearea%<0
oksave%
8,10,f$,&c85,,ram%,ram%+jpegsize%
ncol=1
m$="T"
X%=(xsp%*4-1)
8*8+6
&2e,&12e,ram%,oname$,X%
&2e,&12e,ram%,oname$,X%
spritearea%<0
oksave%
flushoutput
&2e,&10c,ram%,f$
#o%:o%=0:
"settype "+f$+" &ff9":
removearea
"Hourglass_Off"
defpal
C%=0
J#r%(C%)=(C%
16)>>1)/15*F
K$g%(C%)=(C%
&60)>>3)/15*F
L0b%(C%)=(C%
8)>>1
128)>>4)/15*F
defpal2
r%(0)=F:g%(0)=F:b%(0)=F
defpal4
S0r%()=15,10,5,0:
C%=0
3:r%(C%)=r%(C%)/15*F:
g%()=r%():b%()=r%()
defpal16
W1r%()=15,13,11,9,7,5,3,0,0,14, 0,13,14,5,15, 0
X1g%()=15,13,11,9,7,5,3,0,4,14,12, 0,14,8,11,10
Y1b%()=15,13,11,9,7,5,3,0,9, 0, 0, 0,11,0, 0,15
C%=0
15:r%(C%)=r%(C%)/15*F:g%(C%)=g%(C%)/15*F:b%(C%)=b%(C%)/15*F:
ipal63
#c%=&38:
rpal%(15),gpal%(15),bpal%(15)
C%=0
15:D%=
rpal%(C%)=
#c%>>4
gpal%(C%)=
#c%>>4
bpal%(C%)=
#c%>>4
C%=0
d)r%(C%)=(rpal%(C%
16)>>1)/15*F
e*g%(C%)=(gpal%(C%
&60)>>3)/15*F
f*b%(C%)=(bpal%(C%
128)>>4)/15*F
ipal(D%)
#c%=&38
C%=0
D%-1:D%=
r%(C%)=(
#c%>>4)/15*F
g%(C%)=(
#c%>>4)/15*F
b%(C%)=(
#c%>>4)/15*F
newropal(D%)
#c%=&38
C%=0
D%-1:D%=
r%(C%)=(D%
255)/255*F
g%(C%)=(D%>>8
255)/255*F
b%(C%)=(D%>>16
255)/255*F
nopal
C%=0
255:r%(C%)=C%/255*F:
:g%()=r%():b%()=r%()
col(A%,B%)
}6B%=B%<<8
B%<<4
&10:pal%!(A%*8)=B%:pal%!(A%*8+4)=B%
bits(A%)
A%=1
="1 bit per pixel"
A%+" bits per pixel"
Z%,s$
Z%=1
80:s$+=
uc(a$)
Z%,z$,b$
Z%=1
a$,Z%,1)
z$>="a"
z$<="z" z$=
z$-32)
b$+=z$:
dim(A%)
flex%
1B%=nextlocation%:A%=A%+3
3:nextlocation%+=A%
"Wimp_SlotSize",-1,-1
currentslot%
currentslot%+&8000<nextlocation%
"Wimp_SlotSize",nextlocation%-&8000,-1
currentslot%
currentslot%+&8000<nextlocation%
42,"Can't get enough memory to process image"
workspace%<0
B% A%
XB%=workspace%:workspace%+=A%+3
workspace%>worklimit%
42,"Not enough workspace"
dimjp(
flex%
1B%=nextlocation%:A%=A%+3
3:nextlocation%+=A%
"Wimp_SlotSize",-1,-1
currentslot%
currentslot%+&8000<nextlocation%
"Wimp_SlotSize",nextlocation%-&8000,-1
currentslot%
currentslot%+&8000<nextlocation% A%=currentslot%+&8000-B%
workspace%<0
B% A%
XB%=workspace%:workspace%+=A%+3
workspace%>worklimit%
42,"Not enough workspace"
W1(c%)
W1(c%)=
#c%<<8
#c%<<16
#c%<<24
#c%<<8
beHW=
#c%<<8
#c%<<24
#c%<<16
#c%<<8
tiff(T%)
1,7:=
s$,t$:
s$+=t$:t$=
0:=s$
bigendian
#c%<<8
#c%<<8
4,9:
bigendian
W1(c%)
6:=(
#c%<<24)>>24
8:=(
tiff(3)<<16)>>16
42,"Silly TIFF tag:"+
nextstrip
rowstogo%=striprows%
"stripptr+=1:
#c%=st%(stripptr)
compression=5
F!firstcode=0:!oldcode=0:!codesize=setcodes%+1:!stack=stk%:!sp=stk%
H!maxcode=clearcode%+2:!maxcodesize=2*clearcode%:!curbit=0:!lastbit=0
compression=5
compression=32773
.!incacheptr=datacache%:!numlefttogo=cache%
12,4,c%,datacache%,cache%
watford(wtsx%,
rep%,
wt%,X%,c%)
rlexpand%,wtsx%,rep%,wt%,X%
C%>>6
0:?X%=C%:X%+=1:wt%=C%
1:wt%-=1:rep%=C%
rlexpand%,wtsx%,rep%,wt%,X%
2:rep%=C%
rlexpand%,wtsx%,rep%,wt%,X%
3:wt%+=1:rep%=C%
rlexpand%,wtsx%,rep%,wt%,X%
X%=wtsx%
watfordcache(wtsx%,
rep%,
wt%,X%)
rlexpand%,wtsx%,rep%,wt%,X%
bytefromcache%:
C%>>6
0:?X%=C%:X%+=1:wt%=C%
1:wt%-=1:rep%=C%
rlexpand%,wtsx%,rep%,wt%,X%
2:rep%=C%
rlexpand%,wtsx%,rep%,wt%,X%
3:wt%+=1:rep%=C%
rlexpand%,wtsx%,rep%,wt%,X%
X%=wtsx%
reduce(
C%,D%:C%=A%:D%=B%
C%<D%
C%,D%
C%=C%
C%=0
A%=A%
D%:B%=B%
readpixelrow(z%())
rows%
rows%-=1:
sx%=x%
(r$+"(z%())")
(r$+"(xp%())"):
xsample%,xmul%,xdiv%,z%(1,0),xp%(1,0),x%
z%()=0
sharppixelrow(z%())
rows%
rows%-=1:
sx%=x%
sharpen%
sharp(z%())
(r$+"(z%())"):
equal%
fit2(z%())
sharpen%
sharp(xp%())
(r$+"(xp%())"):
equal%
fit2(xp%())
xsample%,xmul%,xdiv%,z%(1,0),xp%(1,0),x%
z%()=0
sharp(z%())
?yread%-=1:
yread% W%=
(r$+"(rm%())"):
equal%
fit2(rm%())
B%=0
col:rm%(0,B%)=rm%(1,B%):rm%(sx%+1,B%)=rm%(sx%,B%):
sharp%,z%(1,0),rm%(1,0),rm1%(1,0),rm2%(1,0),totvals2%
rm2%(),rm1%():rm1%()=rm%()
scaledpixelrow(z%())
sy%=y%
readpixelrow(z%())
:ysamp%-=1:
ysamp%=0
readpixelrow(xl%()):ysamp%=ymul%
ydiv%=1
z%()=xl%()
ysamp%>=ydiv%
"ysamp%-=ydiv%:z%()=xl%()*ydiv%
Y%:z%()=xl%()*ysamp%:Y%=ydiv%-ysamp%:ysamp%=0
ysamp%=0
readpixelrow(xl%()):ysamp%=ymul%
ysamp%>Y%
4ysamp%-=Y%:xl2%()=xl%()*Y%:z%()=z%()+xl2%():Y%=0
<Y%-=ysamp%:xl2%()=xl%()*ysamp%:z%()=z%()+xl2%():ysamp%=0
Y%=0
ysamp%+=1
fit(z%())
histequal%,z%(1,0),new%(0,0),x%
fit2(z%())
histequal%,z%(1,0),new%(0,0),sx%
adjustpalette(mul,sub)
mul=1
sub=0
C%=0
colourindex
#Qr%(C%)=(r%(C%)-sub)*mul+1:g%(C%)=(g%(C%)-sub)*mul+1:b%(C%)=(b%(C%)-sub)*mul+1
ham
C%=0
4:ltable!C%=(ltable!C%-sub)*mul+1:
input>400
C%=0
colourindex
*Crpal%(C%)=(rpal%(C%)-sub)*mul+1:gpal%(C%)=(gpal%(C%)-sub)*mul+1
+Ebpal%(C%)=(bpal%(C%)-sub)*mul+1:table%(C%)=(table%(C%)-sub)*mul+1
cachesize(A%)
&20023,"ChangeFSI$Cache",A%,-1
Z<>0
35,"ChangeFSI$Cache",A%,20
,,Z:A%?Z=13:cache%=
$A%,"K")
$A%,"k") cache%=cache%*1024
cache%=128*1024
refill
striprows%>0
nextstrip
12,4,c%,datacache%,cache%:rowstogo%=cacherows%:buff%=datacache%
input=24
input=48
rbo%>=0 rb%=buff%+rbo%:gb%=buff%+gbo%:bb%=buff%+bbo%
refillpcd
pcdblk%!4>=sy%
pcdblk%!12>=sy% pcdblk%!12=sy%
"PhotoCD_GetBlock",pcdh%,,pcdblk%,datacache%,pcdindex%,,,pcdcache%,pcdcachesize%
AVrowstogo%=cacherows%:buff%=datacache%:pcdblk%!4+=cacherows%:pcdblk%!12+=cacherows%
B0rb%=buff%+rbo%:gb%=buff%+gbo%:bb%=buff%+bbo%
8(z%())
mappix%,z%(1,0),r%(0),g%(0),b%(0),buff%:buff%+=rowbytes%
F&rowstogo%-=1:
rowstogo%=0
refill
16(z%())
mappix%,z%(1,0),rpal%(0),gpal%(0),r%(0),g%(0),b%(0),buff%,buff%
J7buff%+=rowbytes%:rowstogo%-=1:
rowstogo%=0
refill
24(z%())
mappix%,z%(1,0),r%(0),g%(0),b%(0),rb%,gb%,bb%
N0rb%+=rowbytes%:gb%+=rowbytes%:bb%+=rowbytes%
O&rowstogo%-=1:
rowstogo%=0
refill
300(z%())
12,4,cc%,pbuff%,sx%:
mappix%,z%(1,0),rpal%(0),gpal%(0),r%(0),g%(0),b%(0),pbuff%,buff%
S7buff%+=rowbytes%:rowstogo%-=1:
rowstogo%=0
refill
400(z%())
readline%,plbytes%,rep%,pix%,plbuff%
mappix%,z%(1,0),r%(0),g%(0),b%(0),rb%,gb%,bb%
500(z%())
LZWdecode%,table%(0),c%,plbuff%,sx%
mappix%,z%(1,0),r%(0),g%(0),b%(0),plbuff%
800(z%())
watfordcache(wtsx%,rep%,wt%,plbuff%)
mappix%,z%(1,0),r%(0),g%(0),b%(0),plbuff%
801(z%())
watford(wtsx1%,rep1%,wt1%,buff%,c%)
watford(wtsx2%,rep2%,wt2%,wtsx1%,cc%)
watford(wtsx3%,rep3%,wt3%,wtsx2%,ccc%)
mappix%,z%(1,0),r%(0),g%(0),b%(0),rb%,gb%,bb%
901(z%())
12,4,c%,rb%,sx%:
12,4,cc%,gb%,sx%:
12,4,ccc%,bb%,sx%
mappix%,z%(1,0),r%(0),g%(0),b%(0),rb%,gb%,bb%
902(z%())
unpack%,buff%:
mappix%,z%(1,0),r%(0),g%(0),b%(0),rb%,gb%,bb%
m7buff%+=rowbytes%:rowstogo%-=1:
rowstogo%=0
refill
1000(z%())
pAX%=buff%:
rep%>0 C%=?pa%:
rlexpand%,pasx%,rep%,C%,X%:pa%+=1
rep2%>0 C%=?pa%:
rlexpand%,pasx%,rep2%,C%,X%:pa%+=1
C%=0
sBrep%=
#c%:C%=?pa%:
rlexpand%,pasx%,rep%,C%,X%:
rep%=0 pa%+=1
uVrep2%=C%
15:rep%=C%>>4:
rep% C%=?pa%:
rlexpand%,pasx%,rep%,C%,X%:
rep%=0 pa%+=1
X%<pasx%
rep2% C%=?pa%:
rlexpand%,pasx%,rep2%,C%,X%:
rep2%=0 pa%+=1
X%=pasx%
mappix%,z%(1,0),r%(0),g%(0),b%(0),buff%
1001(z%())
|AX%=buff%:
rep%>0 C%=?pa%:
rlexpand%,pasx%,rep%,C%,X%:pa%+=1
rep%=
#c%:C%=?pa%:
rlexpand%,pasx%,rep%,C%,X%:
rep%=0 pa%+=1
X%=pasx%:
mappix%,z%(1,0),r%(0),g%(0),b%(0),buff%
1100(z%())
readline%,plbytes%,rep%,pix%,plbuff%
mappix%,z%(1,0),r%(0),g%(0),b%(0),plbuff%
1400(z%())
vrep%
vrep%-=1
9G%=buff%:
X%=1
planes%:G%+=rowbytes%:F%=G%-rowbytes%
C%=0
C%=0
#c%:vrep%=
#c%-1
*D%=F%:
12,4,c%,F%,patlen%:F%+=patlen%
C%>1
N%=2
E%=0
patlen%-1:F%?E%=D%?E%:
:F%+=patlen%:
C%=128
12,4,c%,F%,C%:F%+=C%
>?F%=(C%
&80)<>0:
E%=F%+1
F%+(C%
&7F):?E%=?F%:
:F%+=C%
F%>=G%:
plancnv%,rowbytes%,buff%,pbuff%
mappix%,z%(1,0),r%(0),g%(0),b%(0),pbuff%
1501(z%())
readiff%,rowbytes%,plbuff%:rowstogo%-=1:
rowstogo%=0
nextstrip
mappix%,z%(1,0),r%(0),g%(0),b%(0),plbuff%
1505(z%())
LZWdecode%,table%(0),c%,plbuff%,rowbytes%
)rowstogo%-=1:
rowstogo%=0
nextstrip
mappix%,z%(1,0),r%(0),g%(0),b%(0),plbuff%
1515(z%())
LZWdecode%,table%(0),c%,plbuff%,rowbytes%
)rowstogo%-=1:
rowstogo%=0
nextstrip
mappix%,z%(1,0),r%(0),g%(0),b%(0),rb%,gb%,bb%
1600(z%())
plancnv%,realrowbytes%,buff%,pbuff%:buff%+=rowbytes%
mappix%,z%(1,0),r%(0),g%(0),b%(0),pbuff%
&rowstogo%-=1:
rowstogo%=0
refill
1601(z%())
X%=0
planes%-1:F%=plbuff%+X%*rowbytes%:
readiff%,rowbytes%,F%:
masking%
readiff%,rowbytes%,pbuff%
plancnv%,rowbytes%,plbuff%,pbuff%
mappix%,z%(1,0),r%(0),g%(0),b%(0),pbuff%
1850(z%())
readiff%,rowbytes%,plbuff%
mappix%,z%(1,0),r%(0),g%(0),b%(0),plbuff%
1851(z%())
readiff%,rowbytes%,plbuff%
mappix%,z%(1,0),r%(0),g%(0),b%(0),rb%,gb%,bb%
1900(z%())
readline%,plbytes%,rep%,pix%,plbuff%
plancnv%,rowbytes%,plbuff%,pbuff%
mappix%,z%(1,0),r%(0),g%(0),b%(0),pbuff%
2000(z%())
X%=buff%:
C%<128
C%+=1:
12,4,c%,X%,C%:X%+=C%
1F%=X%:?F%=
C%=C%
-1:?X%=?F%:X%+=1:
X%=buff%+rowbytes%
mappix%,z%(1,0),r%(0),g%(0),b%(0),buff%
2001(z%())
X%=buff%:
C%<128
&C%=(C%+1)*2:
12,4,c%,X%,C%:X%+=C%
7F%=X%:
12,4,c%,X%,2:
C%=C%
-1:!X%=!F%:X%+=2:
X%=buff%+rowbytes%
mappix%,z%(1,0),rpal%(0),gpal%(0),r%(0),g%(0),b%(0),buff%,buff%
2002(z%())
X%=buff%:
C%<128
+C%=(C%+1)*step24:
12,4,c%,X%,C%:X%+=C%
AF%=X%:
12,4,c%,X%,step24:
C%=C%
-1:!X%=!F%:X%+=step24:
X%=buff%+rowbytes%
mappix%,z%(1,0),r%(0),g%(0),b%(0),rb%,gb%,bb%
2250(z%())
mappix%,z%(1,0),rpal%(0),r%(0),gpal%(0),g%(0),bpal%(0),b%(0),table%(0),buff%
7buff%+=rowbytes%:rowstogo%-=1:
rowstogo%=0
refill
2300(z%())
clrfirst%
X%=0
sx%-1:rb%?X%=?back%:gb%?X%=back%?1:bb%?X%=back%?2:
vrep%
vrep%-=1
vrep%=-1:
mappix%,z%(1,0),r%(0),g%(0),b%(0),rb%,gb%,bb%:=
#c%:D%=
&40 D%=
1:E%=
:vrep%=D%-1:
vrep%<0 vrep%=
2:ccol%=back%?D%:cbuf%=rb%+sx%*D%:
D%=255 cbuf%=alpha%
X%=0
D%-1:cbuf%?X%=ccol%:
:cbuf%+=D%
12,4,c%,cbuf%,D%+1:cbuf%+=D%+1:
D%+1
6:C%=
X%=0
D%:cbuf%?X%=C%:
:cbuf%+=D%+1
mappix%,z%(1,0),r%(0),g%(0),b%(0),rb%,gb%,bb%
2401(z%())
bm_rle8,rowbytes%,plbuff%
mappix%,z%(1,0),r%(0),g%(0),b%(0),plbuff%
2402(z%())
bm_rle4,rowbytes%,plbuff%
mappix%,z%(1,0),r%(0),g%(0),b%(0),plbuff%
3000(z%())
mappix%,z%(1,0),rpal%(0),r%(0),gpal%(0),g%(0),bpal%(0),b%(0),table%(0),buff%
7buff%+=rowbytes%:rowstogo%-=1:
rowstogo%=0
refill
3500(z%())
3600(z%())
mappix%,z%(1,0),r%(0),g%(0),b%(0),rb%,gb%,bb%
0rb%+=rowbytes%:gb%+=rowbytes%:bb%+=rowbytes%
)rowstogo%-=1:
rowstogo%=0
refillpcd
3708(z%())
4A%=jpegspace%:jpegy%-=1:B%=jpegy%:rb%=
(jpeg%+4)
mappix%,z%(1,0),r%(0),g%(0),b%(0),rb%
3724(z%())
HA%=jpegspace%:jpegy%-=1:B%=jpegy%:rb%=
(jpeg%+4):gb%=rb%+1:bb%=rb%+2
mappix%,z%(1,0),r%(0),g%(0),b%(0),rb%,gb%,bb%
rewind
rows%=sy%:
flag
#c%=st%
100:
#c%=4
200:
#c%=st%:rep%=0
300:
#c%=st%:
#cc%=stcc%
400:
#c%=st%:rep%=0
500:
I%=0
clearcode%-1:table%(I%)=I%:
#c%=st%
F!firstcode=0:!oldcode=0:!codesize=setcodes%+1:!stack=stk%:!sp=stk%
H!maxcode=clearcode%+2:!maxcodesize=2*clearcode%:!curbit=0:!lastbit=0
501:buff%=datacache%
600:
#c%=&380
700:
#c%=st%
800:
#c%=0:rep%=0:wt%=0
801:
#c%=0:
#cc%=0:
#ccc%=0:rep1%=0:wt1%=0:rep2%=0:wt2%=0:rep3%=0:wt3%=0
900:
#c%=0
901:
#c%=0:
#cc%=0:
#ccc%=0
902:
#c%=st%
1000:
#c%=st%:pa%=ctable%:rep%=0:rep2%=0
1100:
#c%=st%:rep%=0
1200:
#c%=1600
1300:
#c%=0
1301:
#c%=0:
#cc%=0:
#ccc%=0
1400:
#c%=st%:vrep%=0
1500:
#c%=st%(0):rowstogo%=striprows%:stripptr=0
compression=5
+F!firstcode=0:!oldcode=0:!codesize=setcodes%+1:!stack=stk%:!sp=stk%
,H!maxcode=clearcode%+2:!maxcodesize=2*clearcode%:!curbit=0:!lastbit=0
1600:
#c%=st%
1700:
#c%=16
1800,1850:
#c%=st%
1900:
#c%=128:rep%=-1
2000:
#c%=st%
2100:
#c%=7
2200:
#c%=st%
2250:
#c%=st%
2300:
#c%=st%:vrep%=0
2400:
#c%=st%
2500:
#c%=st%
2600:
#c%=st%
2700:
#c%=st%
2800:
#c%=st%
2900:
#c%=st%
3000:
#c%=0
3600:pcdblk%!4=0
3700:jpegy%=sy%
3900,3905:
#c%=st%
cache%
flag=3600
DEpcdblk%!12=cacherows%:
refillpcd:
cache%>=filesize% rowstogo%=-1
cache%<filesize%
12,4,c%,datacache%,cache%:rowstogo%=cacherows%
buff%=datacache%
cachebytes% !incacheptr=datacache%:!numlefttogo=cache%
input=24
input=48
rbo%>=0 rb%=buff%+rbo%:gb%=buff%+gbo%:bb%=buff%+bbo%
flag=1500
compression=5 rowstogo%=striprows%
Assemble_Shell
I%=0
P%=code%
[ OPT I%
.Shell_Call
MOV R9,R0
TSMOV R0,#0:MOV R1,#0:MOV R2,#0:MOV R3,#2:MOV R4,#0:MOV R5,#0:MOV R6,#0:MOV R7,#0
SWI "OS_SetEnv"
STMFD R13!,{R0-R7, R12}
W-MOV R0,#0:MOV R1,#0:MOV R2,#0:MOV R3,#0
SWI "OS_Control"
STMFD R13!,{R0-R3}
Z%MOV R0,#&10:MOV R1,#0:MOV R2,#0
[!SWI "XOS_ChangeEnvironment"
STMFD R13!,{R1,R2}
LDR R3,[R14,#28]
LDR R3,[R8,R3]
STMFD R13!,{R3,R9,R14}
SUB R9,R13,#1024
MOV R5,R9
b-ADR R6,Shell_Job:ADR R4,Shell_Job_End
.Shell_Copy
LDR R2,[R6],#4
STR R2,[R5],#4
CMP R6,R4
BCC Shell_Copy
MOV PC,R9
.Shell_Job
LDR R2,[R3,#-4]!
STR R2,[R9,#-4]!
CMP R3,#&8000
BHI Shell_Job
STMFD R13!,{R9}
ADR R0,Shell_Exit
pKMOV R1,R9:MOV R2,#0:MOV R3,#2:MOV R4,#0:MOV R5,#0:MOV R6,#0:MOV R7,#0
SWI "OS_SetEnv"
ADR R0,Shell_Error
ADR R1,Shell_Buffer
MOV R2,#0:MOV R3,#0
SWI "OS_Control"
MOV R0,#&10
ADR R1,Shell_UpCall
MVN R2,#0
y!SWI "XOS_ChangeEnvironment"
STR R13,Shell_Job_End
LDR R0,[R13,#4*2]
ADD R0,R0,R9
SUB R0,R0,#&8000
SWI "OS_CLI"
.Shell_Exit
MOV r0, #0
.Shell_Common
STR r0, Shell_ErrorWord
LDR R13,Shell_Job_End
LDMFD R13!,{R8,R9,R10,R14}
LDMFD R13!,{R1-R2}
MOV R0,#&10
SWI "OS_ChangeEnvironment"
LDMFD R13!,{R0-R3}
SWI "OS_Control"
LDMFD R13!,{R0-R7, R12}
SWI "OS_SetEnv"
MOV R1,#&8000
.Shell_Restore
LDR R2,[R8],#4
STR R2,[R1],#4
CMP R1,R9
BCC Shell_Restore
LDR R0,Shell_ErrorWord
TEQ R0,#0
BICEQS PC,R14,#&10000000
RNES PC,R14,#&10000000
.Shell_UpCall
MOV PC,R14
.Shell_Error
ADR r0, Shell_Buffer + 4
B Shell_Common
.Shell_Buffer
EQUD 0
EQUD &12345678
EQUS
EQUS
.Shell_ErrorWord
EQUD 0
.Shell_Job_End
EQUD 0
A%=Shell_Job_End+4
subtask(a$)
task%
"Wimp_StartTask",a$
code% 1024
Assemble_Shell
$A%=a$:
Shell_Call
snb_next(c%)
#c%<>255
#c%:=&100
v%<>255:
#c%:v%=256
snb_skip(c%)
v%,w%:v%=
#c%:w%=
#c%:w%=(w%*256+
#c%=v%+w%:
snb_needdjpeg(c%)
sz%:
Not Acorn code - added. Assumes file is JPEG!
#c%=2:
:sz%=
snb_next(c%):
sz%=&C0
sz%>255:=
sz%>&C0
sz%<&D0
sz%<>&C4
sz%<>&CC:=
M_SOFn
sz%>&E0
sz%<&F0:=
M_APPn
snb_skip(c%):
getstring(ptr%)
c%,p$
p$=""
(?ptr%>31
?ptr%<256)
(p$)<255
c%=?ptr%
p$+=
ptr%+=1